程序读取2
变量a和b并显示它们的总和。数字的大小可以达到10^100
。
计划几乎可行。当我们添加11
和11
时,正确输出22
。但是,例如,当15
和15
时,而不是30
会显示20
。
有什么问题?
#include <iostream>
#include <string>
#include <iomanip>
using namespace std;
int main()
{
string str1, str2;
cin>>str1>>str2;
int len1 = str1.length();
int len2 = str2.length();
char mas1[101], mas2[101];
int mas3[101], mas4[101];
for(int i=0; i<len1; i++)
{
strcpy(mas1, str1.c_str());
int ia = mas1[i] - '0';
mas3[i] = ia;
}
for(int i=0; i< len2; i++)
{
strcpy(mas2, str2.c_str());
int ia = mas2[i] - '0';
mas4[i] = ia;
}
int length;
if (len1 > len2)
length = len1 + 1;
else
length = len2 + 1;
for (int ix = 0; ix < length; ix++)
{
mas4[ix] += mas3[ix];
mas4[ix + 1] += (mas4[ix] / 10);
mas4[ix] %= 10;
}
if (mas4[length - 1] == 0)
length--;
for(int i=0;i<len2;i++)
{
cout<<mas4[i];
}
return 0;
}
答案 0 :(得分:1)
您可以按照它们在字符串中出现的顺序向数组中添加整数:
for(int i=0;i<len1;i++) {
strcpy(mas1, str1.c_str());
int ia = mas1[i] - '0';
mas3[i] = ia;
}
for(int i=0;i<len2;i++) {
strcpy(mas2, str2.c_str());
int ia = mas2[i] - '0';
mas4[i] = ia;
}
然后按照相同的顺序将数字加起来,从低索引到高索引:
for (int ix = 0; ix < length; ix++) {
mas4[ix] += mas3[ix];
mas4[ix + 1] += (mas4[ix] / 10);
mas4[ix] %= 10;
}
所以你基本上把数十个加起来,然后是几个,并且错误地将数字从数字加载到数字中。如果你考虑如何在纸上添加两个数字,你会发现这是不正确的。你需要从那些开始,然后进入数十,等等。因此要么颠倒你在数组中保存整数的顺序,要么颠倒你添加它们的顺序,如果你需要创建一个新的数字位置,请注意从最大数字开始。