题目描述
求A+B的和。
输入
有多组数据,每组两行,每行是一个不超过200位的非负整数,没有多余的前导0。
输出
每组输出一行,即相加后的结果。结果里不能有多余的前导0,即如果结果是342,那么就不能输出为0342。
样例输入 复制
1 2 1 9
样例输出 复制
3 10
这道题是老师已经讲过并做过的高精度计算用数组解决的问题,需要注意的是,前导0的处理
#include <stdio.h>
#include <string.h>
int main() {
char num1[205], num2[205], res[205];
while (scanf("%s%s", num1, num2) != EOF) {
int len1 = strlen(num1), len2 = strlen(num2);
int carry = 0, k = 0;
for (int i = len1 - 1, j = len2 - 1; i >= 0 || j >= 0; i--, j--) {
int x = i >= 0 ? num1[i] - '0' : 0;
int y = j >= 0 ? num2[j] - '0' : 0;
int sum = x + y + carry;
res[k++] = sum % 10 + '0';
carry = sum / 10;
}
if (carry > 0) {
res[k++] = carry + '0';
}
while (k > 1 && res[k - 1] == '0') {
k--;
}
for (int i = k - 1; i >= 0; i--) {
printf("%c", res[i]);
}
printf("\n");
}
return 0;
}