2013-11-09 186 views
1

這是我的第一個問題,所以我希望我不會破壞論壇上的任何規則。我想請你幫忙。我真的編程noob,但爲了做作業,我必須在C++中編寫一個程序,它將添加2個二進制數。我能夠通過轉換爲小數點並添加它們。我做了它bcs我已經在我的電腦中有一些零件。我的問題是,除非輸入非常大的二進制數,否則一切正常。當我們的學校程序檢查代碼時,更改數據類型會在結果上產生差異。林不知道要改變確切。先謝謝你。它看起來像proble occure當「E」十進制數必須是converted-大型二進制文件添加

#include <iostream> 
    #include <cmath> 
    #include <string> 
    #include <vector> 
    using namespace std; 
    int main() 
    { 
    int k = 0; 
    int l = 0; 
    int i = 0; 
    int j = 0; 
    double number = 0; 
    double numberb = 0; 
    long dec; 
    string input; 
    string inputb; 
    cout << "Enter two binary numbers:" << endl; 

    cin >> input >> inputb; 

    if(cin.fail()) 
     {cout << "Wrong input." << endl; 
     return 0; 
     } 





    for (i = input.length() - 1; i>=0; i--) 
    { 
    if (input[i] != '1' && input[i] != '0') 
    { 
    cout << "Wrong input." << endl; 
    return 0; 
    } 
    if (input[i] == '1') 
    { 
    number += pow((double)2,(int)j); 
    } 
    j++; 
    } 

    for (k = inputb.length() - 1; k>=0; k--) 
    { 
    if (inputb[k] != '1' && inputb[k] != '0') 
    { 
    cout << "Wrong input." << endl; 
    return 0; 
    } 
    if (inputb[k] == '1') 
    { 
    numberb += pow((double)2,(int)l); 
    } 
    l++; 
    } 

    dec = number+numberb; 


    vector <double> bin_vector; 
    long bin_num; 






     while (dec >= 1) 
     { 
      bin_num = dec % 2; 
      dec /= 2; 
      bin_vector.push_back(bin_num); 
     } 

     cout << "Soucet: "; 
     for (int i = (double) bin_vector.size() - 1; i >= 0; i--) 
      cout << bin_vector[i] << ""; 

     cout << endl; 
     return 0; 


} 
+1

考慮到你正在爲此付出的努力,我幾乎要告訴你,你不必爲了完成這件事而轉換成小數。這樣做,即解決問題而不必轉換爲機器十進制,將自動解決您的大數問題。其次,如果沿着我所建議的道路前進,你需要考慮兩個位串的長度*不相等*的可能性。 – WhozCraig

+0

是的,我明白,它可能會更容易使其另一種方式,現在我考慮這個選項。但我仍然需要添加0 + 0選項。我的目標是在任何成本中獲得這些點:答案 – user2971793

+0

我建議你定義一個函數'string bin_sum(const string&a,const string&b)'。當你這樣做的時候,你可以通過傳遞已知的字符串並檢查結果來*測試*該函數。 –

回答

0

可能是你的老師告訴你,double號碼大數是巨大的。他們是,但他們有一個很大的缺點:他們不能準確地表示大數,因爲他們(粗略地說)只存儲數字的前幾位數字,以及小數點的位置,就像你的袖珍計算器顯示的那樣,123456E13)。

所以你不應該在這裏使用double數字,因爲你需要精確的結果,不管你的數字有多大。一個更好的想法是同時處理兩個字符串並將結果逐位存儲在另一個字符串中,稱爲result

順便說一句:由於double數字通常可以精確地存儲53位二進制數字,所以您測試程序的位數更多,這很好。