个人认为比较清晰简单的程序——
#include
#include
int main(void){
int i,a1,b1,k;
char a[32],b[32];
int af[32]={0},bf[32]={0},c[32],s;
printf("输入加数1\n");
gets(a);
printf("输入加数2\n");
gets(b);
a1=strlen(a);
b1=strlen(b);
k=a1>b1?a1:b1;
for(i=0;i
af[i]=a[a1-i-1]-'0';
}
for(i=0;i
bf[i]=b[b1-i-1]-'0';
}
c[0]=0; // 这些部分跟你原编码几乎一样
for(i=0;i
{ //我首先计算除最高位以外的位数,比如198 + 103 我先计算98 + 03
s = af[i]+bf[i]+c[i]; //个人喜换再加个s值来存储某个位上的数之和,方便后面引用
c[i] = s % 10;
c[i+1] = s / 10;
}
s = af[k-1]+bf[k-1]+c[k-1]; //计算最高位的结果,来决定c[]的位数是不是比a[]b[]多
if(s > 10)
{
c[k-1] = s % 10; //例如,937 + 128 = 1065 得数是四位数
c[k] = 1;
printf("计算结果:");
for(i = k;i>=0;i--) // 因此,i的初始值是k而不是k-1
{
printf("%d",c[i]);
}
}
else{ //如果得数的位数与原本一样
c[k-1] = s;
printf("计算结果:");
for(i= k-1;i>=0;i--) //i的初始值是k-1
{
printf("%d",c[i]);
}
}
return 0;
}
思路比较清晰一点,望采纳,有疑问可以继续追问我
温馨提示:答案为网友推荐,仅供参考