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());
}
}
}