Reversion Count(Java大数)

计蒜客2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 I . Reversion Count
Description:

There is a positive integer X, X’s reversion count is Y. For example, X=123, Y=321; X=1234, Y=4321. Z=(X-Y)/9, Judge if Z is made up of only one number(0,1,2…9), like Z=11,Z=111,Z=222,don’t consider ‘+’and ‘-‘.

Input:

Input contains of several test cases. Each test case only contains of a number X, L is the length of X. ( 2 <= L < 100)

Output:

Output “YES”or “NO”.

样例输入

10
13
样例输出

YES
YES
题意:给一个数X,求出它的逆转数Y,
然后求出Z = (X-Y)/9
判断Z的数值部分是不是只由一个数字组成
是的话输出“YES”
不是的话输出“NO”
AC代码

import java.io.BufferedInputStream;
import java.util.*;
import java.math.*;
public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(new BufferedInputStream(System.in));
        while(in.hasNext())
        {
            BigDecimal x;
            x = in.nextBigDecimal();
            String str = x.toString();
            char[] ch;
            int l = str.length();
            ch = str.toCharArray();
            char[] yc = new char[110];
            BigDecimal y = BigDecimal.ZERO; 
            int pos = l;
            BigDecimal p = BigDecimal.ONE;
            for(int i = 0; i < l; i++)
            {
                yc[--pos]= ch[i];
                int tmp = yc[pos]- '0'; 
                BigDecimal tmp1 = BigDecimal.valueOf(tmp);
                y = y.add(tmp1.multiply(p));
                p = p.multiply(BigDecimal.TEN);
            }
            BigDecimal z = x.subtract(y);
            z = z.divide(BigDecimal.valueOf(9));
            z = z.abs();
            boolean flag = true;
            String zs = z.toString();
            int l1= zs.length();
            char[] zc = zs.toCharArray();
            int po = zc[0];
            for(int i = 1; i < l1; i++)
            {
                if(zc[i] != zc[0])
                {
                    flag = false;
                    break;
                }
            }
            if(flag)
                System.out.println("YES");
            else 
                System.out.println("NO");
            }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值