大整数加法
描述
求两个不超过200位的非负整数的和。
输入
有两行,每行是一个不超过200位的非负整数,可能有多余的前导0。
输出
一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入
22222222222222222222
33333333333333333333
样例输出
55555555555555555555
代码
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char a[250], b[250];
int ans[250];
memset(ans, 0, sizeof(ans));
cin >> a >> b;
int ai = 0, bi = 0, h = 0, ansi = 0;
while (a[ai] != '\0') ++ai;
while (b[bi] != '\0') ++bi;
ai--, bi--;
while (ai > -1 && bi > -1) {
ans[ansi] = (a[ai] - '0' + b[bi] - '0' + h) % 10;
h = (a[ai] - '0' + b[bi] - '0' + h) / 10;
ansi++, ai--, bi--;
}
while (bi > -1) {
ans[ansi] = (b[bi] - '0' + h) % 10;
h = (b[bi] - '0' + h) / 10;
++ansi, --bi;
}
while (ai > -1) {
ans[ansi] = (a[ai] - '0' + h) % 10;
h = (a[ai] - '0' + h) / 10;
++ansi, --ai;
}
while (h) {
ans[ansi] = h % 10;
h /= 10;
++ansi;
}
while (ansi > -1 && ans[ansi] == 0) --ansi;
if (ansi == -1) cout << 0;
while (ansi > -1) cout << ans[ansi--];
return 0;
}
思路分析
其实这个题的难度是中下,按照常规思路解决即可,需要考虑无非就是前置0和两个都为0的特殊情况

浙公网安备 33010602011771号