我们先看代码:
java
public class Main {
public static void main(String[] args) {
int count = 0;
for(int year = 1900 ; year <= 9999 ; year++) {
int sumYear = getSum(year);
for (int month = 1; month <= 12; month++) {
int maxDay = getMaxDay(month , year);
int sumMonth = getSum(month);
for(int day = 1 ; day <= maxDay ; day++){
int sumDay = getSum(day);
if(sumYear == sumMonth + sumDay){
count++;
}
}
}
}
System.out.println(count);
}
public static int getSum(int num){
int sum = 0;
while(num > 0){
sum += num % 10;
num /= 10;
}
return sum;
}
public static int getMaxDay(int month ,int year){
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
return 31;
case 4:
case 6:
case 9:
case 11:
return 30;
case 2:
return isLeapYear(year) ? 29 : 28;
default:
return 0;
}
}
public static boolean isLeapYear(int year) {
return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ;
}
}
我们分模块分析:

这部分函数是为了获取每一位数字并将其加和

这部分函数是为了找到每个月的最大天数
注意还有闰年的存在,所以要有一个判断函数

如果是的话就返回true,如果不符合就返回false