HDU P2097 JAVA

本文介绍了一种特殊的四位数——Sky数,并提供了一个Java程序用于判断任意四位十进制数是否符合Sky数的定义。Sky数是指在十进制、十六进制及十二进制下数字之和相等的四位数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Problem Description
Sky从小喜欢奇特的东西,而且天生对数字特别敏感,一次偶然的机会,他发现了一个有趣的四位数2992,这个数,它的十进制数表示,其四位数字之和为2+9+9+2=22,它的十六进制数BB0,其四位数字之和也为22,同时它的十二进制数表示1894,其四位数字之和也为22,啊哈,真是巧啊。Sky非常喜欢这种四位数,由于他的发现,所以这里我们命名其为Sky数。但是要判断这样的数还是有点麻烦啊,那么现在请你帮忙来判断任何一个十进制的四位数,是不是Sky数吧。

Input
输入含有一些四位正整数,如果为0,则输入结束。

Output
若n为Sky数,则输出“#n is a Sky Number.”,否则输出“#n is not a Sky Number.”。每个结果占一行。注意:#n表示所读入的n值。

Sample Input
2992
1234
0

Sample Output
2992 is a Sky Number.
1234 is not a Sky Number.

import java.util.Scanner;

public class Main {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int N = sc.nextInt();
            if(N==0)
                break;
            System.out.print(N);
            int x=N%10; int y=N/10;
            int sum=x;
            while(y>0){
                x=y%10;
                y=y/10;
                sum+=x;
            }
            if(jinz(N,12)==jinz(N,16)&&jinz(N,16)==sum){
                System.out.println(" is a Sky Number.");
            }else{
                System.out.println(" is not a Sky Number.");
            }
        }

    }

    private static int jinz(int N, int R) {
        int sum=0;
        if (N < 0) {
            N = -N;
            System.out.print("-");
        }
        int x = N / R;
        int y = N % R;
        int chs[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 };
        int[] a = new int[50];
        int i = 0;
        a[0] = N % R;
        while (x != 0) {
            i++;
            y = x % R;
            a[i] = y;
            x = x / R;
        }
        int b[] = new int[i + 1];
        for (int k = 0; k < i + 1; k++) {
            // System.out.print(a[k]+" a");
            b[k] = a[i - k];
            // System.out.print(b[k]+" ");
        }
        for (int j = 0; j < b.length; j++) {

            sum+=chs[b[j]];
        }
        return sum;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值