题目:哈沙德数是指在某个固定的进位制中,可以被各位数字之和整除的正整数。
public static void main(String[] args) {
System.out.println(num(2023));
}
//返回值为指定下标位置的幸运数字,传入的参数第位置,不是下标
public static int num(int index) {
int[] num=new int[2023];
for (int i = 0; i < num.length; i++) {
int k = 1;
while (i < num.length) {
// 将十进制的数字转换成字符串
String ten = String.valueOf(k);
// 对十进制字符串进行求和
int sum = 0;
for (int j = 0; j < ten.length(); j++) {
sum = sum + Integer.parseInt(String.valueOf(ten.charAt(j)));
}
// 转换成十六进制
String m = Integer.toHexString(k);
int sum1 = 0;
// 对十六进制字符串进行求和
for (int j = 0; j < m.length(); j++) {
char c = m.charAt(j);
//判断从十六进制中取出的字符是否是字母,如果是字母,将十六进制的字母转换成十进制的整数进行求和
if (!Character.isLetter(c)) {
sum1 = sum1 + Integer.parseInt(String.valueOf(c));
} else {
sum1 = sum1 +Integer.parseInt(String.valueOf(c), 16);
}
}
// 转换成八进制
String p = Integer.toOctalString(k);
// 对八进制字符串进行求和
int sum2 = 0;
for (int j = 0; j < p.length(); j++) {
sum2 = sum2 + Integer.parseInt(String.valueOf(p.charAt(j)));
}
// 转换成二进制
String o = Integer.toBinaryString(k);
int sum3 = 0;
for (int j = 0; j < o.length(); j++) {
sum3 = sum3 + Integer.parseInt(String.valueOf(o.charAt(j)));
}
if (k % sum == 0 & k % sum1 == 0 & k % sum2 == 0 & k % sum3 == 0) {
num[i] = k;
i++;
}
k++;
}
}
return num[index-1];
}