1

我正在大学做我的学校作业 - 程序需要 2 个二进制数并写出它们的总和。我的大学使用一种特殊的软件来测试家庭作业,其中一个测试是“随机数据测试”,我的程序无法通过,有人可以给我一些提示吗?程序:

#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

如果问题出在非常大的数字上,您可以使用可能不允许的 bigdecimal 库,或者使用您在小学学到的字符串手动计算:

  1. 取最后两位数并将它们相加
  2. 如果结果为 0 或 1,则写入数字
  3. 如果结果大于 2(二进制 10 或 11),则写入最低有效位并将溢出转移到下一个位置
  4. 在步骤 1 重复,直到处理完所有数字
于 2012-11-12T12:10:04.773 回答
0

当二进制数非常高时,问题似乎出在 B2D 函数中。如何解决?由于 pow <<= 1,我不能使用 double

于 2012-11-12T11:44:43.387 回答