第十四届蓝桥杯大赛软件赛省赛JavaB组 试题 B: 幸运数字

试题 B: 幸运数字

【问题描述】
哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整
数。例如 126 是十进制下的一个哈沙德数,因为 (126)10 mod (1+2+6) = 0;126
也是八进制下的哈沙德数,因为 (126)10 = (176)8,(126)10 mod (1 + 7 + 6) = 0;
同时 126 也是 16 进制下的哈沙德数,因为 (126)10 = (7e)16,(126)10 mod (7 +
e) = 0。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为
哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示
为:1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . . 。现在他想知道第 2023 个幸运数
字是多少?你只需要告诉小蓝这个整数的十进制表示即可。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

public class LuckyNumber {
    
    
    public static void main(String[] args) {
    
    
        List<Integer> luckyNumbers = new ArrayList<>();
        int count = 0;
        int number = 1;
        while (count < 2023) {
    
    
            if (isHarshadInAllBases(number)) {
    
    
                luckyNumbers.add(number);
                count++;
            }
            number++;
        }
        System.out.println("The 2023rd lucky number is " + luckyNumbers.get(2022));
    }

	//判断某个数是不是幸运数
    private static boolean isHarshadInAllBases(int number) {
    
    
        return isHarshad(number, 10) && isHarshad(number, 2) && isHarshad(number, 8) && isHarshad(number, 16);
    }
    
	//判断某个数是不是哈沙德数
    private static boolean isHarshad(int number, int base) {
    
    
        int a=number;
        int sum = 0;
        while (number > 0) {
    
    
            int digit = number % base;
            sum += digit;
            number /= base;
        }
        return a%sum==0;
    }
}

猜你喜欢

转载自blog.csdn.net/m0_58121644/article/details/130037888