2012-11-12 96 views
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; 
} 
+0

您能详细说明“无法通过”是什么意思吗?什么是“随机数据”?预期的行为是什么? – Angew

+0

你是否尝试过自己做这个测试,并逐步调试? – PlasmaHH

+0

嗯,我实际上不知道它是什么,这就是问题,只有我知道的是它用“随机数据”测试程序。预期的行为是,如果您编写两个二进制数字,则会打印它们的总和,如果您写入其他任何值,然后输入1或0,则会打印“错误条目”。程序运行良好,当我测试它与正常的二进制数字,当我做了像“10020 ea56f”又名错误的字符(0和1除外)的输入,它打印“错误条目”,我不知道问题在哪里是。 – user1751550

回答

0

看起来问题是在函数B2D中,当二进制数非常高时。如何解决它?我不能使用双倍由于pow < < = 1

0

如果问题是与非常大的数字,您可以使用一个bigdecimal库,这可能不被允许,或者使用字符串手动计算在小学了解到:

  1. 采取的最后两位数字,并将它们添加
  2. 如果结果为0或1,写数字
  3. 如果结果大于2(二进制10或11)更大的写最不重要的数字并将溢出带到下一个地方
  4. 重复步骤1,直到处理完所有数字