Problem 2089 数字游戏

本文介绍了一个简单的算法问题:计算两个整数相加后的结果中数字5出现的次数。使用Java的BigInteger来处理可能的大整数运算,通过逐位检查来统计5的出现次数。

Problem Description

现在,给你2个整形数字A和B。你的任务就是计算出A+B的结果C后,统计C中数字5出现的次数。

 Input

输入数据第一行包含一个整数T,表示测试数据的组数。对于每组测试数据:

输入两个整数a,b(-2*10^9<a,b<2*10^9)。两个数字之间用空格隔开。

 Output

对于每组测试数据,输出一行,包含一个整数,表示数字5出现的次数。

 Sample Input

2
4 5
33 22

 Sample Output

0
2

算法没什么难的,就是处理大数据罢了,这里用的是Java中的BigInteger,蛮方便的,只要从最低位依次判断是否为5,一直到最高位,记录下为5的个数就可以了。
要提交的时候把Fzu2089改成Main即可
代码如下:

import java.math.BigInteger;
import java.util.Scanner;

public class Fzu2089 {

	public static void main(String[] args) {
	
		Scanner s = new Scanner(System.in);
		int T = s.nextInt();
		while(T-->0)
		{
			String firststr = s.next();
			String secondstr  = s.next();
			BigInteger first = new BigInteger(firststr);
			BigInteger second = new BigInteger(secondstr);
			BigInteger sum = first.add(second);
			BigInteger iCount = new BigInteger("0");//记录5出现的次数
			BigInteger iFactor = new BigInteger("1");//记录当前位,个位,百位,千位..
			BigInteger iCurrNum = new BigInteger("0");//记录当前的数字
			BigInteger zero = new BigInteger("0");
			BigInteger one = new BigInteger("1");
			BigInteger ten = new BigInteger("10");
			BigInteger five = new BigInteger("5");
			while(sum.divide(iFactor).compareTo(zero)!=0)
			{
				iCurrNum = sum.divide(iFactor).mod(ten);//个数是什么数字,百位是什么数字,千位是什么数字..
				if(iCurrNum.compareTo(five)==0)
				{
					iCount = iCount.add(one);//如果当前位是5,则加1.
				}
				iFactor = iFactor.multiply(ten);//从个位变成百位,千位,万位,直到最高位为至
				
			}
			
			System.out.println(iCount.toString());
		}

	}

}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值