C ++长算术

时间:2018-03-09 00:52:23

标签: c++

程序读取2变量a和b并显示它们的总和。数字的大小可以达到10^100

计划几乎可行。当我们添加1111时,正确输出22。但是,例如,当1515时,而不是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;
}

1 个答案:

答案 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; 
}

所以你基本上把数十个加起来,然后是几个,并且错误地将数字从数字加载到数字中。如果你考虑如何在纸上添加两个数字,你会发现这是不正确的。你需要从那些开始,然后进入数十,等等。因此要么颠倒你在数组中保存整数的顺序,要么颠倒你添加它们的顺序,如果你需要创建一个新的数字位置,请注意从最大数字开始。