大数加法
2014-05-28 12:03
162 查看
#include"stdio.h" #include"string.h" #define NM 1001 char a[NM],b[NM],sum[NM+1]={0}; int main() { int n,i,j,la,lb,k,l; scanf("%d",&n);//确定要计算多少组数 for(i=1;i<=n;i++) { scanf("%s%s",a,b); // 因大数所几十位上百位里能超过1001位 //所数值类型都能表示出来只好用字符数组来表示 la=strlen(a);//得输入数据位数 lb=strlen(b); //把每位数分别加sum项用sum[0]表示位sum[1]表示十位 for(j=la-1,k=0;j>=0;j--) sum[k++]=a[j]-'0';//得每位表示数大小 for(j=lb-1,k=0;j>=0;j--) sum[k++]+=b[j]-'0';//与上面相应数相加此时某项大于等于10 l=la>lb?la:lb;//得长数据长度 for(j=0;j<l;j++) //逐扫描数据数组 if(sum[j]>=10)//某项大于等于10进位 { sum[j]-=10; sum[j+1]++; } /*notice here sum[j]>=10 not sum[j]>10*/ if(sum[j]) //总体进位多位数总长度加 l++; printf("Case %d:\n%s + %s = ",i,a,b); for(j=l-1;j>=1;j--)//逆序打印即打印所谓位 { printf("%d",sum[j]); sum[j]=0; } printf("%d\n",sum[0]);//先把数组第位置0下轮做准备 if(i<n) //还初定好轮数换行 printf("\n"); } return 0; }
相关文章推荐