由于运算的的范围大大超出了标准数据类型能表示的范围, 所以用到高精度加法
#include <stdio.h>
#include <string.h>
int main(){
char a[1001], b[1001], c[2002];
int i, j, carry, m; //carry 是指进位
int la, lb;
carry = 0;
m = 0;
scanf("%s%s", a, b);
la = strlen(a);
lb = strlen(b);
for(i = la - 1, j = lb - 1; i >= 0 && j >= 0;i--, j--){
int k = a[i] - '0' + b[j] - '0' + carry;//一定要减去'0'
carry = k / 10; //处理进位
c[m++] = k % 10;
}
//a, b的长度不一定相等,分别处理a的长度比b长和b的长度比a长的情况
while(i >= 0){
int k = a[i] - '0' + carry;
carry = k / 10;
c[m++] = k % 10;
i--;//注意一定要加上这一句,否则为死循环
}
while(j >= 0){
int k = b[j] - '0' + carry;
carry = k / 10;
c[m++] = k % 10;
j--;
}
if(carry != 0){
c[m++] = carry;//处理了像 999 + 1 这种情况的加法
}
for(i = m - 1; i >= 0; i--){
printf("%d", c[i]);
}
printf("\n");
return 0;
}