2012-11-12 100 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,直到處理完所有數字