给定两个正整数(不含前导 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);
}
}