杭电acm1002 大数加法

原理就是模仿小学的数学加法
因为我们要从个位开始加起 所以需要先倒置存储 使前面为低位,先进行运算
直接上代码
#include<stdio.h>
#include<string.h>
int n,c[1000],d[1000],sum[1000];
char a[1001],b[1001];
int main(){
scanf("%d",&n);
int i,j;
for(i=0;i<n;i++){
getchar();
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
memset(c,0,sizeof©);
memset(d,0,sizeof(d));
memset(sum,0,sizeof(sum));//记得每次要把数组清零
scanf("%s %s",a,b);
int lena=strlen(a),lenb=strlen(b);
for(j=0;j<lena;j++){
c[j]=a[lena-1-j]-‘0’;
// printf(“c[%d]:为%4d \n”,j,c[j]);
}
for(j=0;j<lenb;j++){
d[j]=b[lenb-1-j]-‘0’;
// printf(“d[%d]:为%4d \n”,j,d[j]);
} //倒置存储
int maxlen=lena>lenb?lena:lenb;
for(j=0;j<maxlen+1;j++){
sum[j]+=c[j]+d[j];//!!!注意这里不是sum[j]=c[j]+d[j],而应该是加上c[j]+d[j],否则之前的进位也会变的无效!!!!
// printf(“s[%d]:初为%4d “,j,sum[j]);
if(sum[j]>=10) {sum[j]-=10;sum[j+1]++;}
// printf(“s[%d]:后为%4d\n”,j,sum[j]);
}
j=maxlen+2;
int k;
while(sum[j]==0){
j–;
if(sum[j]!=0){
printf(“Case %d:\n”,i+1);
printf(”%s + %s = “,a,b);
for(k=j;k>=0;k–){
printf(”%d”,sum[k]);}
printf("\n");
break;
}
}
if(i<n-1) printf("\n");
}
return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43305764/article/details/84979147
今日推荐