小学生算术
-
描述
-
很多小学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个三位数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个0(这是输入结束标记)。
-
输入
- 输入两个正整数m,n.(m,n,都是三位数) 输出
- 输出m,n,相加时需要进位多少次。 样例输入
-
123 456 555 555 123 594 0 0
样例输出
-
0 3 1
-
-
#include<stdio.h>
int main()
{
int m,n,sum;
int a,b,t,i;
scanf("%d%d",&m,&n);
while(m&&n&&m>=100&&m<1000&&n>=100&&n<1000)
{ sum=0;
for(i=0;i<3;i++)
{
a=m%10;
m=m/10;
b=n%10;
n=n/10;
if(a+b>=10)
{
sum++;
m++; //这道题的关键处就在于这里,
}
}
printf("%d\n",sum);
scanf("%d%d",&m,&n);
}
return 0;
}
-
输入m,n两个数
-
上面的代码中a=m%10,m/=10;a依次取得的是这个三位数的倒序,而让进位的时候,应该是在数a或b上面的任意的一个数的上面加上1就行了
-
所以在进位的同时让m或者n这个数加上1那么再整除10取余数的时候就向前加了1;
-
这才是满10进1的规律!
-
下面这个程序运行不过去但是编译的结果是正确的,它存在于一个潜在的错误,
-
#include<stdio.h>
int main()
{
int a[3],b[3],m,n,sum;
scanf("%d%d",&m,&n);
while(m!=0&&n!=0&&m>=100&&m<1000&&n>=100&&n<1000)
{ sum=0;
a[2]=m/100;
a[1]=m%100/10;
a[0]=m%10;
b[2]=n/100;
b[1]=n%100/10;
b[0]=n%10;
for(int i=0;i<3;i++)
{
if(a[i]+b[i]>=10)
{
a[i+1]=a[i+1]+1;//
b[i+1]=b[i+1]+1;//潜在的错误点
sum++;
}
}
printf("%d\n",sum);
scanf("%d%d",&m,&n);
}
return 0;
} -
-
题虽简单但是一不小心就会掉进一个不起眼的bug中。。。。
-