1

这是我的第一个问题,所以我希望我不会在论坛上违反任何给定的规则。我想请你帮忙。我真的在编程菜鸟,但是对于家庭作业,我必须用 C++ 编写一个程序,它将添加 2 个二进制数。我能够通过转换为小数并添加它们来实现。我做到了,因为我的电脑里已经有了一些零件。我的问题是,除非我输入非常大的二进制数,否则一切正常。当我们的学校程序检查代码时,更改数据类型会产生不同的结果。我不确定到底要改变什么。先感谢您。当必须转换带有“e”的十进制数时,似乎出现了问题-

    #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;


}
4

1 回答 1

0

可能您的老师告诉您,double数字对于大数来说非常有用。它们是,但它们有一个很大的缺点:它们不能准确表示大数,因为它们(粗略地说)只存储数字的前几位以及小数点的位置,就像你的袖珍计算器显示的那样(例如, 123456E13)。

所以你根本不应该在这里使用数字,因为无论你的数字有多大double,你都需要精确的结果。一个更好的主意是同时处理两个字符串并将结果逐位存储在另一个字符串中,称为result.

顺便说一句:由于double数字通常可以精确地存储 53 位二进制数字,因此您最好用更多数字测试程序。

于 2013-11-09T13:53:59.880 回答