南阳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]); } }
运行结果:
相关文章推荐
- 南阳oj 题目74 小学生算术
- 南阳oj_(74)小学生算术
- 南阳题目74-小学生算术
- 南阳oj 74题------小学生算术
- 小学生算术(南阳oj74)
- 南阳oj 题目24 素数距离问题
- 三点顺序 【南阳 oj 题目68 】
- 南阳OJ-题目96 n-1位数【语言入门】
- 南阳OJ 题目100:一的个数
- 南阳oj 题目44 子串和
- nyoj 题目10 skiing —— 南阳oj
- 南阳oj 题目40 公约数和公倍数
- 南阳oj 题目477 A+B Problem III
- 南阳oj 题目169 素数
- 【南阳oj 题目23】 取石子(一)
- 南阳 oj 擅长排列的小明 题目19
- 【南阳OJ分类之语言入门】80题题目+AC代码汇总
- 南阳OJ--题目57:6174问题
- nyoj 题目10 skiing —— 南阳oj
- 南阳oj 题目29 求转置矩阵问题