1

I am doing my school homework on university - program which takes 2 binary numbers and write their sum. My university uses a special software for testing homeworks and one of tests is "Test by random data" which my program cant pass, can someone give me some tips where the problem can be? Program:

#include <iostream>
#include <string>
using namespace std;
int B2D(string number)
{
    int result = 0, pow = 1;
    for ( int i = number.length() - 1; i >= 0; --i, pow <<= 1 )
        result += (number[i] - '0') * pow;

    return result;
}
string D2B(int number)
{
    if ( number == 0 ) return "0";
    if ( number == 1 ) return "1";

    if ( number % 2 == 0 )
        return D2B(number / 2) + "0";
    else
        return D2B(number / 2) + "1";
}
int main()
{
    string input_number;
    string input_number2;
    cout << "Write 2 binary numbers" << endl;
    if(!(cin >> input_number >> input_number2))
    {
        cout << "Wrong entry." << endl;
        return 0;
    }
    for(unsigned int i=0;i<input_number.size();i++){
        if((input_number[i] != '1') && (input_number[i] != '0'))
        {
            cout << "Wrong entry." << endl;
            return 0;
        }
    }
    for(unsigned int i=0;i<input_number2.size();i++){
        if((input_number2[i] != '1') && (input_number2[i] != '0'))
        {
            cout << "Wrong entry."<<endl;
            return 0;
        }
    }
    int result = B2D(input_number);
    int result2 = B2D(input_number2);
    int result3 = result + result2;
    string result4 = D2B(result3);
    cout << "Result: " << result4 << endl;
    return 0;
}
4

2 に答える 2

0

2 進数が非常に高い場合、関数 B2D に問題があるようです。修正方法は?pow <<= 1 のため double を使用できません

于 2012-11-12T11:44:43.387 に答える
0

問題が非常に大きな数にある場合は、おそらく許可されていないbigdecimalライブラリを使用するか、小学校で学んだように文字列を使って手で計算することができます:

  1. 最後の 2 桁を取り、それらを追加します
  2. 結果が 0 または 1 の場合は、数字を書きます
  3. 結果が 2 より大きい場合 (2 進数の 10 または 11)、最下位桁を書き込み、オーバーフローを次の桁に繰り越します
  4. すべての数字が処理されるまでステップ 1 を繰り返す
于 2012-11-12T12:10:04.773 に答える