修改了下某个大佬放的优雅代码
public class Main {
public static void main(String[] args) {
int count=0;
int i,j,year,month;
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
for(year=1900;year<=9999;year++){
if(year%4==0&&year%100!=0||year%400==0)
days[2]=29;
else
days[2]=28;
for(i=1;i<=12;i++){
for(j=1;j<=days[i];j++){
if(fun(year)==fun(i)+fun(j))count++;
}
}
}
System.out.println(count);
}
static int fun(int n){
int sum=0;
while(n>0){
sum+=n%10;
n/=10;
}
return sum;
}
}
对比一下自己写的垃圾代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int[] days = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int[] rdays = {31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
//是闰年直接修改二月份天数及days[1],不用在创建一个
int count = 0;
int year = 1900, month = 1, day = 1;
while (year < 9999 || (year == 9999 && month < 12) || (year == 9999 && month == 12 && day <= 31)) {
// 判断是否是闰年
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
int[] currentDays = isLeapYear ? rdays : days;
//日期的改变可以直接采用for循环套用
// 检查日期是否有效
if (day > currentDays[month - 1]) {
day = 1;
month++;
if (month > 12) {
month = 1;
year++;
}
} else {
// 检查年份的数位数字之和是否等于月的数位数字之和加日的数位数字之和
if (add(year) == add(month) + add(day)) {
count++;
}
day++; // 在日期有效的情况下递增day
}
}
scan.close();
System.out.println(count);
}
public static int add(int num) {
int sum = 0;
while (num > 0) {
sum += num % 10;
num /= 10;
}
return sum;
}
}