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

本文介绍了一道南阳OJ上的小学生算术题目,包括题目的链接、解题思路和代码实现,最后展示了运行结果。
摘要由CSDN通过智能技术生成

题目信息:题目链接

小学生算术

时间限制: 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]);
	}

}


运行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值