java蓝桥杯的日历问题

##问题描述
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 1900 年 1 月 1 日至 9999 年 12 月 31 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
例如,2022年11月13日满足要求,因为 2+0+2+2=(1+1)+(1+3) 。
请提交满足条件的日期的总数量。

import java.util.Calendar;
import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
        Calendar cal=Calendar.getInstance();
        cal.set(Calendar.YEAR,1900);
        int year=cal.get(Calendar.YEAR);
        cal.set(Calendar.DATE,1);
        int ans=0;
        while(year!=10000){
            int y=cal.get(Calendar.YEAR);
            int month=cal.get(Calendar.MONTH);
            month+=1;
            int day=cal.get(Calendar.DAY_OF_MONTH);
            int y1=y%10;
            int y2=y%100/10;
            int y3=y%1000/100;
            int y4=y/1000;
            int y5=y1+y2+y3+y4;
            int m1=month%10;
            int m2=month/10;
            int d1=day%10;
            int d2=day/10;
            int md=m1+m2+d1+d2;
            if(y5==md){
                ans++;
            }
            cal.add(Calendar.DATE,1);
            year=y;
        }
        System.out.println(ans);




    }
}


输出的结果是70904,答案是70910;搞不懂哪里出了问题

以下是一个 Java 实现,它遍历了所有可能的日期,对于每个日期,它计算年份、月份和日期的各位数字之和,并检查它们是否相等。如果相等,它将日期计入总数。最后,程序输出符合条件的日期总数。


```java
public class Main {
    public static int digitSum(int n) {
        /* 计算一个数字的各位数字之和 */
        int sum = 0;
        while (n != 0) {
            sum += n % 10;
            n /= 10;
        }
        return sum;
    }

    public static void main(String[] args) {
        int count = 0;
        for (int year = 1900; year <= 9999; year++) {
            for (int month = 1; month <= 12; month++) {
                int daysInMonth = 31;
                if (month == 4 || month == 6 || month == 9 || month == 11) {
                    daysInMonth = 30;
                } else if (month == 2) {
                    if (year % 4 != 0 || (year % 100 == 0 && year % 400 != 0)) {
                        daysInMonth = 28;
                    } else {
                        daysInMonth = 29;
                    }
                }
                for (int day = 1; day <= daysInMonth; day++) {
                    if (digitSum(year) == digitSum(month) + digitSum(day)) {
                        count++;
                    }
                }
            }
        }
        System.out.println(count);
    }
}


```


public class Main{

    public static void main(String[] args) {//2730
        int num = 2023;
        while (true){
            String string = Integer.toString(num, 16);
            char[] chars = string.toCharArray();
            boolean flag = false;
            for (char aChar : chars) {
                if (aChar < 'a' || aChar > 'f') {
                    flag = true;//标记不合法
                    break;
                }
            }
            if (!flag){//如果合法
                System.out.println(num);
                break;
            }
            num++;
        }
    }
}