2013-11-09 6 views
1

это мой первый вопрос, поэтому я надеюсь, что не нарушу ни одно из заданных правил здесь, на форуме. Я хотел бы попросить вас о помощи. Я действительно программирую noob, но для домашней работы мне нужно сделать программу на C++, которая добавит 2 двоичных числа. Я смог сделать это через преобразование в десятичную и добавив их. Я сделал это bcs. У меня уже были части для этого на моем ПК. Мой вопрос в том, что все работает нормально, если я не вхожу в действительно большие двоичные числа. Изменение типов данных влияет на результаты, когда наша школьная программа проверяет код. Я не уверен, что это точно изменится. Заранее спасибо. Похоже, proble когда больше появляться десятичное число с «е» должен быть 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. Моя цель - получить эти очки за любую стоимость: D ty для ответа – user2971793

+0

Я предлагаю вам определить функцию 'string bin_sum (const string & a, const string & b)'. Когда вы это сделаете, вы можете * проверить * эту функцию, передав ей известные строки и проверив результат. –

ответ

0

Возможно, ваш учитель сказал, что double номера идеально подходят для больших чисел. Они есть, но у них большой недостаток: они не могут точно представлять большие числа, так как они (грубо говоря) сохраняют только первые несколько цифр номера вместе с положением десятичной точки, как показывает ваш карманный калькулятор (например, , 123456E13).

Таким образом, вы не должны использовать здесь цифры double, так как вам нужны точные результаты, независимо от того, насколько велики ваши номера. Лучшей идеей является процесс обеих строк одновременно и сохранение результата по цифре в другой строке, называемой result.

Кстати: поскольку номера double могут хранить 53 двоичных разряда точно, хорошо, что вы проверили программу с еще большим количеством цифр.

Смежные вопросы