我正在做大学的学校作业 - 程序需要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;
}
答案 0 :(得分:0)
当二进制数非常高时,问题出现在功能B2D中。怎么解决?由于pow&lt;&lt; = 1
,我不能使用double答案 1 :(得分:0)
如果问题是非常大的数字,你可以使用一个bigdecimal库,这可能是不允许的,或者像你在小学里学到的那样用手工计算: