幸运数字

问题描述

哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整 数。例如 126 是十进制下的一个哈沙德数,因为 (126) 10 mod
(1+2+6) = 0 ; 126 也是八进制下的哈沙德数,因为 (126) 10 = (176) 8 , (126) 10 mod (1 + 7 + 6) = 0 ; 同时 126 也是 16 进制下的哈沙德数,因为 (126) 10 = (7 e ) 16 , (126) 10 mod (7 + e ) = 0 。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为
哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示 为:1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . . 。现在他想知道第 2023 个幸运数 字是多少?你只需要告诉小蓝这个整数的十进制表示即可。

题解

这道题的关键是获取各进制下的位数之和,然后拿10进制%各位数之和,判断是否为0即可。要拿到各位数之和,类似十进制,只需要反复%进制、/进制即可。代码如下:

public class Main {
    public static boolean isHansard(int num, int base) {
        int sum = 0;
        int temp=num;
        while (num > 0) {
            sum += num % base;
            num /= base;
        }
        return temp % sum == 0;
    }

    public static void main(String[] args) {
        int count = 0;
        for (int num = 1; ; num++) {
            if (isHansard(num, 2) && isHansard(num, 8) && isHansard(num, 10) && isHansard(num, 16)) {
                count++;
                if (count == 2023) {
                    System.out.println(num);
                    break;
                }
            }
        }
    }
}

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容