实现一个加法器,使其能够输出a+b的值。
输入包括两个数a和b,其中a和b的位数不超过1000位。
可能有多组测试数据,对于每组数据,
输出a+b的值。
2 6
10000000000000000000 10000000000000000000000000000000
8
10000000000010000000000000000000
#include <stdio.h>
#include <string.h>
int main(int argc, const char * argv[]) {
char a[1000], b[1000];
int c[1000];
while(scanf("%s %s",a,b) != EOF){
int len1 = strlen(a);
int len2 = strlen(b);
int len;
int j;
for(int i = len1;i < 1000;i ++) a[i] = '0';
for(int i = len2;i < 1000;i ++) b[i] = '0';
if(len1 > len2){
len = len1;
for(int i = len - 1;i >= len1 - len2 ;i --) b[i] = b[i - len1 + len2];
for(int i = 0;i < len1 - len2;i ++) b[i] = '0';
}
else{
len = len2;
for(int i = len - 1;i >= len2 - len1 ;i --) a[i] = a[i - len2 + len1];
for(int i = 0;i < len2 - len1;i ++) a[i] = '0';
}
int carry = 0;
int i;
for(i = len - 1;i >= 0; i --){
int x,y;
x = (int)a[i] - 48;
y = (int)b[i] - 48;
c[i] = x + y + carry;
if(c[i] > 9){
c[i] -= 10;
carry = 1;
}
else carry = 0;
}
if(carry == 1){
for(int m = len;m > 0;m --) c[m] = c[m - 1];
len ++;
a[0] = 1;
}
for(j = 0;j < len;j ++)printf("%d",c[j]);
if(j == len - 1) printf("\n");
}
return 0;
}
注意数字0和字符'0'
注意向右对齐的时候的移动
前面要补上字符'0'
注意进位以及最后进位要整体右移