总结
1、对于闰年问题的月份、2月天数利用数组进行解决,这是新学到的思路。
//第一个元素为避免“0”月,让1-12月都对应正确的天数。
int[] mouth = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
----------分割线-----------------------
//设置闰年的2月天数
if((year%400==0)||(year%4==0&&year%100!=0)) {
mouth[2]=29;
}else {
mouth[2]=28;
}
2、关于“ / ” 和“%”的区别
对于年份问题(int类型)来说:
除:取运算结果小数点左边的数。例:2024/1000=2.024 结果取2
取余:取 运算结构小数点右边的数。例:2024/100%10=20%10=0 结果取0
完整代码
public class Main {
public static void main(String[] args) {
int count = 0;
//第一个元素为避免“0”月,让1-12月都对应正确的天数。
int[] mouth = new int[]{0,31,28,31,30,31,30,31,31,30,31,30,31};
int day=1;
//mon为月份:1-12
int mon =1;
int year =1900;
while (true){
//设置闰年的2月天数
if((year%400==0)||(year%4==0&&year%100!=0)) {
mouth[2]=29;
}else {
mouth[2]=28;
}
//判定是否符合年份数字和等于月份和天的数字之和。
if (year/1000 + year/100%10+ year/10%10 +year%10== mon/10 + mon%10 +day/10 + day%10){
count++;
}
day++;
if(day>mouth[mon]){//天数大于对应月份实际天数时将天数初始化,月份+1;
day=1;
mon++;
if (mon>12){//月份为13时初始化为1.年份+1.
mon=1;
year++;
}
}
if (year==9999 && mon==12 && day==31){
System.out.println(count);
break;
}
}
}
}