题目描述
哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整数。
例如 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 Main{ public static void main(String[] args) { int count = 0; int i = 0; while (count != 2023) { i++; if (addall(i, 2)) continue; if (addall(i, 8)) continue; if (addall(i, 10)) continue; if (addall(i, 16)) continue; count++; } System.out.println(i); } //根据对应进制转化得到各位数和 public static boolean addall(int i, int r) { int sum = 0; String s = Integer.toString(i, r); for (int j = 0; j < s.length(); j++) { char c = s.charAt(j); //因为16进制有字母 if (c >= 97) sum += c - 'a' + 10; else sum += c - '0'; } return i % sum != 0; } }
结果: