问题描述
哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整数。例如 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 个幸运数字是多少?你只需要告诉小蓝这个整数的十进制表示即可
答案提交
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
import java.util.Scanner;
// 1:无需package
// 2: 类名必须Main, 不可修改
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
//在此输入您的代码...
int num = 10;
int n = 0;
for(int i = 127;;i++) {
if(Main.isNum(i)) num++;
if(num == 2023) {
n = i;
break;
}
}
System.out.print(n);
scan.close();
}
public static boolean isNum(int i) {//判断是否为幸运数字
int sum = 0;
int theNum = i;
while(theNum != 0) {//十进制
sum += theNum % 10;
theNum /= 10;
}
if(i % sum != 0) return false;
sum = 0;
theNum = i;
while(theNum != 0) {//二进制
sum += theNum % 2;
theNum /= 2;
}
if(i % sum != 0) return false;
sum = 0;
theNum = i;
while(theNum != 0) {//八进制
sum += theNum % 8;
theNum /= 8;
}
if(i % sum != 0) return false;
sum = 0;
theNum = i;
while(theNum != 0) {//十六进制
sum += theNum % 16;
theNum /= 16;
}
if(i % sum != 0) return false;
return true;
}
}
题解使用枚举法。