这是我做的一道编程题:题目是小学生数学:

题目如下:
小学生数学
很多小学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个三位数在相加时需要多少次进位。
你编制的程序应当可以连续处理多组数据,
直到读到两个0(这是输入结束标记)。

输入
输入两个正整数m,n.(m,n,都是三位数)
输出
输出m,n,相加时需要进位多少次。
样例输入

123 456
555 555
123 594
0 0

样例输出

0
3
1
这是我写的:
#include<stdio.h>
int main()
{
int n,m;
while(scanf("%d%d",&m,&n)&&(m||n))
{
if(m >999 || n >999 || m < 100 || n<100)
{
return 0;
}
int i,j,k,a,b,c;
i = m%10;
j = m/10%10;
k = m/100;
a = n%10;
b = n/10%10;
c = n/100;
int x=0,y=0,z=0;
if(i+a >= 10)
{
x = 1;
}
if(j+b >=10)
{
y = 1;
}
if(k+c >=10)
{
z = 1;
}
printf("%d\n",x+y+z);
}
return 0;
}
这是AC的(我的错了!):
#include<stdio.h>
int main(){

int a, b;

while (scanf("%d%d", &a, &b), a || b){

int c = a + b;

int cnt = 0;

if ((a / 10 % 10 + b / 10 % 10) % 10 != c / 10 % 10)

cnt++;

if ((a / 100 + b / 100) % 10 != c / 100 % 10)

cnt++;

if (c / 1000 != 0)

cnt++;

printf("%d\n", cnt);

}

return 0;
}
我就想知道我的哪里不正确!

第1个回答  2015-02-23
很明显的错误啊。比如123+277 按你的算法 得出的结果是1 可是实际上进位了两次,你没有考虑进位后导致再进位的情况。能理解了么?本回答被提问者和网友采纳
相似回答