这是我的第一个问题,所以我希望我不会在论坛上违反任何给定的规则。我想请你帮忙。我真的编程菜鸟,但对于家庭作业我必须在C ++中制作一个程序,它将添加2个二进制数。我能够通过转换为小数并添加它们。我做了它bcs我已经在我的PC上有一些部件。我的问题是,除非我输入非常大的二进制数字,否则一切正常。当我们的学校计划检查代码时,更改数据类型会对结果产生影响。我不确定是不是要改变。先感谢您。当带有“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;
}
答案 0 :(得分:0)
可能你的老师告诉你,double
数字对于大数字很有用。他们是,但他们有一个很大的缺点:他们不能完全代表大数字,因为他们(粗略地说)只存储数字的前几位数字,以及小数点的位置,就像你的袖珍计算器显示(例如,123456E13
)。
所以你不应该在这里使用double
数字,因为你需要精确的结果,无论你的数字有多大。更好的想法是同时处理两个字符串并将结果逐位存储在另一个字符串中,称为result
。
顺便说一句:由于double
数字通常可以精确地存储53个二进制数字,所以用更多数字测试程序是好的。