时间限制:1秒
空间限制:65536K
题目描述
实现一个加法器,使其能够输出a+b的值。
输入描述:
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出描述:
可能有多组测试数据,对于每组数据, 输出a+b的值。
示例1
输入
2 6 10000000000000000000 10000000000000000000000000000000
输出
8 10000000000010000000000000000000
#include <stdio.h>
#include <string.h>
#define N 1005
char a[N],b[N];
void Cal(char *_a, char *_b, int len1, int len2) {
_a[0] = '0';
while(len2){ //较短字符串和较长字符串尾部对齐,然后由尾及首相加
if(_b[len2]-'0'+_a[len1] > '9'){
_a[len1] = _b[len2]-'0'+_a[len1]-10;
_a[len1-1] += 1;
}
else _a[len1] += _b[len2]-'0';
len1 --;
len2 --;
}
while(_a[len1] > '9'){ //不再参与计算的前(len1-len2)位可能进位
_a[len1] -= 10;
_a[len1-1] += 1;
}
//用len1是否为0来判断需要len1!=len2,否则在第一个while循环后,len1即减为0,导致出错
if(_a[0] == '0') printf("%s\n",_a+1); //最高位为0时必须从下标1开始输出
else printf("%s\n",_a);
}
void Solve(){
int len1 = strlen(a+1);
int len2 = strlen(b+1);
if(len1 >= len2){
//para 1:长度较长字符串
//para 3:长度较长字符串长度
Cal(a,b,len1,len2);
}
else Cal(b,a,len2,len1);
}
int main(){
while(~scanf("%s%s",a+1,b+1)){ //空一位保存和的最高位
Solve();
}
return 0;
}