您的位置:首页 > 其它

NYoj 74 小学生算术

2017-05-16 23:51 260 查看
小学生算术

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

难度:1

描述

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

输入

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

输出

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

样例输入

123 456

555 555

123 594

0 0

样例输出

0

3

1

这个题第一眼,我都看着像大数加法。高精度,我不想碰。但是没办法,早晚都要学。先从简单的入手,只有想清楚思路,就稳了。我的想法是,按字符串处理,一位一位的加,把每一位的进位放到对应的数组里,c[i]里。我觉得虽然繁琐,这个题肯定有更简单的方法,数字很小嘛。但我想用字符串是为了下一步做大数加法做点准备。我的代码如下。

#include"cstdio"
#include"cstring"
#include"cmath"
#include"algorithm"
#include"cstdlib"
using namespace std;
bool cmp(int a,int b)
{
return a<b;
}

int main ()
{
int t;
int i, j, k, n, m, x, y;
char a[5];
char b[5];
char c[5];
while(scanf("%s %s",a,b)!=EOF)
{
if(a[0]=='0'&&b[0]=='0')
return 0;
c[2]=(a[2]-'0'+b[2]-'0')/10+'0';
for(i=1;i>-1;i--)
{
c[i]=((a[i]-'0'+b[i]-'0'+c[i+1]-'0')/10)+'0';
}
int sum=0;
for(i=0;i<3;i++)
{
sum=sum+c[i]-'0';
}
printf("%d\n",sum);
}
return 0;
}


我再附上全场最佳的代码

#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
a2f1
(a+d>=10)
{i+=1;}
printf("%d\n",i);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: