编程俱乐部每日一练(2018年11月30日)A + B problem 大数加法
Description
Calculate A + B.
Input
Each line will contain two integers A and B. Process to end of file. (EOF)
Output
For each case, output A + B in one line.
Sample Input 1
2 3
4 5
Sample Output 1
5
9
计算机计算的数值位数有限,当数值位数达到几百几千位时就无法计算。
思路:
将数字以字符串的形式输入,再逆向转为整形数组,对位进行相加,控制好进位和输出时的位置即可。
代码:
#include <stdio.h>
int main()
{
char A[1000],B[1000];
while(scanf("%s%s",&A,&B)!=EOF){
int a[1000],b[1000]; //将0填充到整形数组中
int i,c,d,e;
c=0,d=0;
for(i=strlen(A)-1;i>=0;i--){
a[c]=A[i]-'0';
c++;
}
for(i=strlen(B)-1;i>=0;i--){
b[d]=B[i]-'0';
d++;
} //逆向填充数组
if (strlen(A)>strlen(B)){
e=strlen(A);
}
else{
e=strlen(B);
} //选出最长位数
for (i=0;i<=e-1;i++){
if (a[i]+b[i]>9){
a[i+1]+=1;
a[i]=(a[i]+b[i])%10;
}
else{
a[i]+=b[i];
} //判断进位
}
if (a[e]==0){
for(i=e-1;i>=0;i--){
printf("%d",a[i]);
}
printf("\n");
}
else{
for(i=e;i>=0;i--){
printf("%d",a[i]);
}
printf("\n"); //通过判断末位是否为零来确定末尾的位置
}
}
return 0;
}