永发信息网

C语言给出两个正整数,计算两个数相加需要多少次进位,求找错!!!

答案:3  悬赏:10  手机版
解决时间 2021-11-17 23:25
  • 提问者网友:川水往事
  • 2021-11-17 02:26
C语言给出两个正整数,计算两个数相加需要多少次进位,求找错!!!
最佳答案
  • 五星知识达人网友:野味小生
  • 2021-11-17 02:37
#include
#include

int main()
{
int i, j, m, n, wei, max, count;
char a[100], b[100], c[100], d[100];
while(scanf("%s %s",a,b)!=EOF)
    {
        wei = 0, count = 0;
        m   = strlen(a);
        n   = strlen(b);
max = m > n ? m : n;
        for(i = m - 1, j = 0; i >= 0; i--, j++) c[j] = a[i] - 48;
for(; j < max; j++) c[j] = 0;
        for(i = n - 1, j = 0; i >= 0; i--, j++) d[j] = b[i] - 48;
for(; j < max; j++) d[j] = 0;

for(i = 0; i < max; i++)
{
if(c[i] + d[i] + wei >= 10)  count++, wei = 1;
else wei = 0;
}

printf("%d
", count);
}
return 0;
}
全部回答
  • 1楼网友:空山清雨
  • 2021-11-17 04:33
如果123 321你希望输出的是0,那么在前面两次for循环之后,将j重新赋值0即可。

错误的原因就是j重用了。追问能不能帮我再看看为什么输99 1输出的是1而不是2?谢谢了!!!追答“网友采纳”那个代码比较完整了,参考一下吧,你的程序除了j重用错误,还没有判断n和m的大小以及提前处理ASCII码(滞后处理因位数不同会出现负数)。
  • 2楼网友:逐風
  • 2021-11-17 03:03
你在
for(i=n-1,j=0;i>=0;i--,j++)
d[j]=b[i];
j++了,j的数增加了
所以b有多少位 j 在后面相加计算 前就是多少
你需要的是(相加需要多少次进位)吧
j++前面的代码感觉多余了追问能不能帮我再看看为什么输99 1输出的是1而不是2?谢谢了!!!追答99加1的时候 个位加了,但是十位相加的时候b[i]等于0多减了48
a[i]+b[i]-48-48+wei就变成了-38 <10

所以jin++只有一次
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯