大数相加的 帮忙看一下为什么555+545不对,自己太笨了,找不出来!

来源:百度知道 编辑:UC知道 时间:2024/06/24 16:43:30
#include<stdio.h>
#include<string.h>
int max(int x,int y)
{
if(x>y)
return
x;
else
return
y;
}
int main()
{
int i,al,bl,temp;
int a[1001],b[1001],c[1001];
char as[1001],bs[1001];
scanf("%s",as);
scanf("%s",bs);
al=strlen(as);
bl=strlen(bs);
for(i=0;i<1001;i++)
{
c[i]=0;
}
for(i=al-1;i>=0;i--)
{
a[al-i-1]=as[i]-48;
}
for(i=bl-1;i>=0;i--)
{
b[bl-i-1]=bs[i]-48;
}
if(al>=bl)
{ for(i=bl;i<al;i++)
b[i]=0;}
else
{
for(i=al;i<bl;i++)
a[i]=0;}
for(i=0;i<=max(al,bl);i++)
{
temp=a[i]+b[i];
c[i]+=temp%10;
c[i+1]+=temp/10;
}
if(c[max(al,bl)]!=0)
printf("%d",c[max(al,bl)]);
for(i=max(al,bl)-1;i>=0;i--)
printf("%d",c[i]);
printf("\n");
retu

程序,基本上是揣摩出来了。已经改正。
#include<stdio.h>
#include<string.h>
int max(int x,int y)
{
if(x>y)
return
x;
else
return
y;
}
int main()
{
int i,al,bl,temp;
int a[1001],b[1001],c[1001];
char as[1001],bs[1001];
scanf("%s",as);
scanf("%s",bs);
al=strlen(as);
bl=strlen(bs);
for(i=0;i<1001;i++)
{
c[i]=0;
}
//错误的地方
for(i=al-1;i>=0;i--)
{
a[al-i]=as[i]-48;
}

for(i=bl-1;i>=0;i--)
{
b[bl-i]=bs[i]-48;
}
//错误终止的地方
//错误原因:位考虑错误。
if(al>=bl)
{ for(i=bl;i<al;i++)
b[i]=0;}
else
{
for(i=al;i<bl;i++)
a[i]=0;}
for(i=0;i<=max(al,bl);i++)
{
temp=a[i]+b[i];
c[i]+=temp%10;
c[i+1]+=temp/10;
}

for(i=max(al,bl)-1;i>=0;i--)
printf("%d",c[i]);
printf("\n"