import java.util.Scanner; // 导入Scanner类用于读取输入
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in); // 创建Scanner对象用于获取用户输入
int ans = 0; // 用于计数满足条件的数字的数量
int i = 1; // 从1开始检查每个数字
// 继续循环直到找到2023个符合条件的数字
while (ans < 2023) {
// 将数字i转换成二进制字符串,并计算数位之和
int x = f(Integer.toBinaryString(i));
// 将数字i转换成十六进制字符串,并计算数位之和
int y = f(Integer.toHexString(i));
// 将数字i转换成八进制字符串,并计算数位之和
int z = f(Integer.toOctalString(i));
// 将数字i转换成十进制字符串,并计算数位之和
int k = f(i + "");
// 检查i是否能被其在各个数制下的数位之和整除
if (i % k == 0 && i % x == 0 && i % y == 0 && i % z == 0) {
ans++; // 如果满足条件,增加计数
System.out.println(i); // 打印出满足条件的数字
}
i++; // 检查下一个数字
}
System.out.println(ans); // 打印出找到的满足条件的数字总数
}
// 定义函数f,用于计算字符串s中所有数字字符的数位之和
public static int f(String s) {
char[] c = s.toCharArray(); // 将字符串转换成字符数组
int res = 0; // 用于累加数位之和
for (char i : c) { // 遍历每个字符
// 如果字符是数字,则直接累加其数值
if (i >= '0' && i <= '9') {
res += (i - '0');
} else {
// 如果字符是字母(在十六进制中表示10-15),则转换后累加
res += ((i - 'a') + 10);
}
}
return res; // 返回数位之和
}
}
蓝桥杯(幸运数字)
于 2024-03-16 20:53:39 首次发布