小学生算术
-
描述
-
很多小学生在学习加法时,发现“进位”特别容易出错。你的任务是计算两个三位数在相加时需要多少次进位。你编制的程序应当可以连续处理多组数据,直到读到两个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,count=0; int a[3],b[3]; while(scanf("%d %d",&m,&n) ) { if (m==0 && n==0) { break; } a[0]=m%10; b[0]=n%10; a[1]=(m/10)%10; b[1]=(n/10)%10; a[2]=m/100; b[2]=n/100; if (a[0]+b[0]>9) { count++; a[1]+=1; } if (a[1]+b[1]>9) { count++; b[1]+=1; } if (a[2]+b[2]>9) { count++; } printf("%d\n",count); <span style="white-space:pre"> </span>count=0; } return 0; }
或者#include<stdio.h> int main() { int a,b,a1,a2,a3,b1,b2,b3,k=0; while(scanf("%d %d",&a,&b),a||b) { a1=a%10; a2=a/10%10; a3=a/100; b1=b%10; b2=b/10%10; b3=b/100; if(a1+b1>=10) { k++; a2++; } if(a2+b2>=10) { k++; a3++; } if(a3+b3>=10) k++; printf("%d\n",k); k=0; } return 0; }
这道题的难点有:1.怎样循环输入两个数,并且保证两个数不为0
这里巧用 while(scanf("%d %d",&a,&b),a||b) ,这里面是逗号表达式,逗号表达式的结果是最后一个表达式的结果
2.要获取两个数的百位、十位、各位数,并且保存起来,
可以不用数组保存,直接用a b c这样的数保存就可以了~~
3.个位数如果加1后,会影响十位,十位加1后,会影响百位,所以这里很巧妙的是,
如果个位相加大于9了,就设一个标识符,让10位先加1~~~~
4.每一次循环结束后,要把count重新清零,
否则下一次循环会在原来的基础上累加了,会出错。。。