问题描述
哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整 数。例如 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
暂无评论内容