3499 幸运数字
3499 幸运数字
⭐️难度:困难
🌟考点:2023、模拟、枚举、省赛
📖
📚
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int cnt = 0;
for (long i = 1; ; i++) {
if(cnt == 2023) break;
if(check10(i) && check2(i) && check8(i) && check16(i)) {
cnt ++;
System.out.print(" cnt:" + cnt);
System.out.println(" i:" + i);
}
}
}
// 十进制
static boolean check10(long x){
String num = "" + x;
int sum = 0;
for (int i = 0; i < num.length(); i++) {
sum += (num.charAt(i) - '0');
}
// System.out.println(" sum:"+sum);
if(x % sum == 0) return true;
else return false;
}
// 二进制
static boolean check2(long x){
String num = Long.toBinaryString(x);
int sum = 0;
for (int i = 0; i < num.length(); i++) {
sum += (num.charAt(i) - '0');
}
// System.out.println(" sum:"+sum);
if(x % sum == 0) return true;
else return false;
}
// 八进制
static boolean check8(long x){
String num = Long.toOctalString(x);
int sum = 0;
for (int i = 0; i < num.length(); i++) {
sum += (num.charAt(i) - '0');
}
// System.out.println(" sum:"+sum);
if(x % sum == 0) return true;
else return false;
}
// 十六进制
static boolean check16(long x){
String num = Long.toHexString(x);
int sum = 0;
for (int i = 0; i < num.length(); i++) {
if(num.charAt(i) >= 'a' && num.charAt(i) <= 'f'){
sum = sum + num.charAt(i) - 'a' + 10;
}
if(num.charAt(i) >= '0' && num.charAt(i) <= '9'){
sum = sum + num.charAt(i) - '0';
}
}
// System.out.println(" sum:"+sum);
if(x % sum == 0) return true;
else return false;
}
}
除了16进制有点特别,因为10代表a,所以要取十进制数应该是
-'a'+10
简单的题目往往采用最朴素的做法