您的位置:首页 > 其它

大数加法

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: