题目描述
实现一个加法器,使其能够输出a+b的值。
输入
输入包括两个数a和b,其中a和b的位数不超过1000位。
输出
可能有多组测试数据,对于每组数据,
输出a+b的值。
样例输入
6 8
2000000000 30000000000000000000
样例输出
14
30000000002000000000
提示 [+]
*** 提示已隐藏,点击上方 [+] 可显示 ***
来源
/*********************************
* 日期:2013-2-21
* 作者:SJF0115
* 题号: 天勤OJ 题目1139: a+b
* 来源:http://acmclub.com/problem.php?id=1139
* 结果:AC
* 来源:2010年华中科技大学计算机研究生机试真题
* 总结:
**********************************/
#include<stdio.h>
#include<string.h>
char a[10001],b[10001],sum[10001];
int BigIntegerAdd(){
//两个数的长度
int lena = strlen(a);
int lenb = strlen(b);
//进位标记
int c = 0;
int i,j,k;
//初始化数组sum
memset(sum,0,10001);
//倒序相加
k = 0;
for(i = lena-1,j = lenb-1;i >= 0 && j >= 0;i--,j--){
sum[k] = a[i] + b[j] - '0' + c;
c = 0;
//如果相加大于等于10
if(sum[k] > '9'){
sum[k] -= 10;
c = 1;
}
k++;
}
//a > b
while(i >= 0){
sum[k] = a[i] + c;
c = 0;
//如果相加大于等于10
if(sum[k] > '9'){
sum[k] -= 10;
c = 1;
}
k++;
i--;
}
//b > a
while(j >= 0){
sum[k] = b[j] + c;
c = 0;
//如果相加大于等于10
if(sum[k] > '9'){
sum[k] -= 10;
c = 1;
}
k++;
j--;
}
//如果最后两个数相加有进位的情况
//例如:67 + 51:5+6有进位
if(c == 1){
sum[k++] = '1';
}
//翻转
char temp;
for(i = 0,j = k-1;i < j;i++,j--){
temp = sum[i];
sum[i] = sum[j];
sum[j] = temp;
}
return 0;
}
int main(){
while(scanf("%s %s",a,b) != EOF){
BigIntegerAdd();
puts(sum);
}
}