大型二进制文件添加

Large binaries add

本文关键字:添加 二进制文件 大型      更新时间:2023-10-16

这是我的第一个问题,所以我希望我不会违反论坛上的任何给定规则。我想向你寻求帮助。我真的是编程菜鸟,但对于家庭作业,我必须用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;

}

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

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

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