##问题描述
对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 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++;
}
}
}