acwing791. 高精度加法

给定两个正整数(不含前导 0),计算它们的和。

输入格式

共两行,每行包含一个整数。

输出格式

共一行,包含所求的和。

数据范围

1≤整数长度≤100000

输入样例:

12
23

输出样例:

35

方法一:

模拟手算

将结果存在保存较长数字的那个数组中,代码比较丑陋,其中c存进位,p存当前位

#include <bits/stdc++.h>
using namespace std;

char a[100010], b[100010];
const int z2 = '0' * 2;

int main() {
    scanf("%s%s", &a, &b);
    int la = strlen(a) - 1, lb = strlen(b) - 1, c = 0;
    bool is = la > lb;
    for (; la >= 0 && lb >= 0; la--, lb--) {
        int p = a[la] + b[lb] + c - z2;
        c = p / 10; p %= 10;
        if (is) a[la] = p + '0'; else b[lb] = p + '0';
    }
    if (is) {
        while (la >= 0 && c > 0) {
            int p = a[la] + c - '0';
            c = p / 10; p %= 10;
            a[la--] = p + '0';
        }
        if (la < 0 && c > 0) printf("1%s", a); else printf("%s", a);
    } else {
        while (lb >= 0 && c > 0) {
            int p = b[lb] + c - '0';
            c = p / 10; p %= 10;
            b[lb--] = p + '0';
        }
        if (lb < 0 && c > 0) printf("1%s", b); else printf("%s", b);
    }
}
原文地址:https://www.cnblogs.com/nosae/p/15821726.html