南阳oj_(74)小学生算术

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

小学生算术

时间限制:3000 ms | 内存限制:65535 KB

难度:1

描述

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

输入

输入两个正整数m,n.(m,n,都是三位数)

输出

输出m,n,相加时需要进位多少次。

样例输入

1
2
3
4
123 456
555 555
123 594
0 0

样例输出

1
2
3
0
3
1

我用的编译器是CodeBlocks

我的代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<cstdio>  
#include<iostream>
using namespace std;
int main()
{

int m,n;
while(cin>>n>>m)
{
if(n!=0&&m!=0)
{
int a, b, c;
a=n%10;//个位
b=n/10%10;//十位
c=n/100;//百位
int e,f,g;
e=m%10;//个位
f=m/10%10;//十位
g=m/100;//百位
int count=0;
if(a+e>9) ++count, ++b;
if(b+f>9) ++count, ++c;
if(c+g>9) ++count;
cout<<count<<endl;
}
else
break;
}
return 0;
}

最优代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include<stdio.h>  
int main()
{

int a,b,c,d,e,f,n,m,i;
for(;;)
{
scanf("%d%d",&n,&m);
if(n==0&&m==0)
return 0;
else
{
i=0;
a=n/100;b=n%100/10;c=n%10;
d=m/100;e=m%100/10;f=m%10;
if(c+f>=10)
{i+=1;b+=1;}
if(b+e>=10)
{i+=1;a+=1;}
if(a+d>=10)
{i+=1;}
printf("%d\n",i);
}
}
return 0;
}


O(∩_∩)O