2981:大整数加法,考点:数组

原题:http://bailian.openjudge.cn/practice/2981/

描述

求两个不超过200位的非负整数的和。

输入

有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。

样例输入

22222222222222222222
33333333333333333333

样例输出

55555555555555555555

解法

思路:模拟小学竖式的计算,从个位开始一个一个的加,中间注意进位。

坑:前导0,如果答案是0不能被去掉,测试样例里包括0+0(找了很久的bug才发现)。

#include <iostream>
#include <cstring>
using namespace std;
int factora[200];
int factorb[200];
int sum[205];
int cnt1, cnt2;
int add()
{
    int maxc = cnt1 < cnt2 ? cnt2 : cnt1;
    for (int i = 0; i < maxc; i++) {
        int temp = sum[i];
        sum[i] = (factora[i] + factorb[i] + sum[i]) % 10;
        sum[i + 1] += (factora[i] + factorb[i] + temp) / 10;
    }
    if (sum[maxc] != 0)
    {
        if (sum[maxc] > 9)
            sum[maxc + 1] = sum[maxc] / 10;
        sum[maxc] = sum[maxc] % 10;
    }
    for (int j = maxc + 2; j >= 0; j--)
    {
        if (sum[j] != 0)
            return j;
    }
    return 0;
}
int main()
{
    memset(sum, 0, sizeof(sum));
    cnt1 = 0;
    cnt2 = 0;
    char inputa[200];
    char inputb[200];
    cin >> inputa;
    cin >> inputb;
    cnt1 = strlen(inputa);
    cnt2 = strlen(inputb);
    for (int i = 0; i < cnt1; i++)
        factora[cnt1 - 1 - i] = inputa[i] - '0';
    for (int i = 0; i < cnt2; i++)
        factorb[cnt2 - 1 - i] = inputb[i] - '0';
    int result = add();
    for (int j = result; j >= 0; j--)
        cout << sum[j];

    return 0;
}

 

posted @ 2021-07-04 15:35  永远是个小孩子  阅读(104)  评论(0编辑  收藏  举报