您的位置:首页 > 其它

南阳OJ 题目64:小学生算术

2017-04-23 21:26 162 查看

题目信息:题目链接


小学生算术

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

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

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


样例输出
0
3
1


解题思路:

输入:这一次的输入与以往不同,就是可以无限制的输入,但是当输入“0   0”的时候结束,这里可以用一个hashNext函数结束循环中的输入,也可以判断输入的内容:当检测是“0   0”的时候结束输入。在这里,每次读取输入的一行,将一行转化成字符串数组,再将这个数组转化成对应的数字数组(注意转化的方法:这里转化成了ASCII值,要变成相应的数字,要减去48,附一张ASCII表)。
    输出:输出很好处理,就是判断进位的次数。
   
功能:这个题要实现的是一个进位运算的功能,因此直接用两个数组保存输入的两个数字,对应的数位进行相加,数字大于10就进一位,进的位数要作用在相邻的更高的位数上(比如:十位上的数相加为s,s=12,则要进一位作用到百位上的数)。
    其中,在进位处理时,无论两个数多大,作用到相邻的位数的数字也是1(最大为9,两个9相加才18保留,1进位)
    具体的代码实现与相应部分的处理如代码所示:

代码实现:

import java.io.InputStreamReader;
import java.util.Scanner;

/*
* Dragon
* 2017/4/21
* 小学生算术:http://acm.nyist.net/JudgeOnline/problem.php?pid=74&rec=rec
* 使用charAt转化成对应的int值得时候,是相应的ascii码值,要转化成字符中的数字,要减去48
*/
public class Num_74 {

public static void main(String[] args)
{
Scanner in=new Scanner(System.in);
int[] result=new int[100];
int m=0;//用来数组result的下标处理
String[] input=new String[2];

input=in.nextLine().split(" ");
while(!input[0].equals("0") && !input[1].equals("0"))
{
//a数组保存第一个数个,十,百的形式
int[] a=new int[3];
for(int i=2,j=0;i>=0;i--)
{
a[j]=input[0].charAt(i)-48;
j++;
}
//相同处理数组b,保存第二个数
int[] b=new int[3];
for(int i=2,j=0;i>=0;i--)
{
b[j]=input[1].charAt(i)-48;
j++;
}

//进位处理
int carryBit=0,count=0;
for(int i=0;i<3;i++)
{
int s=a[i]+b[i]+carryBit;
if(s>9)
{
carryBit=1;count++;
}
}
result[m]=count;
m++;
input=in.nextLine().split(" ");
}

//输出结果
for(int i=0;i<m;i++)
System.out.println(result[i]);
}

}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: