对于一个日期,我们可以计算出年份的各个数位上的数字之和,也可以分别计算月和日的各位数字之和。请问从 19001900 年 11 月 11 日至 99999999 年 1212 月 3131 日,总共有多少天,年份的数位数字之和等于月的数位数字之和加日的数位数字之和。
例如,20222022 年 1111 月 1313 日满足要求,因为 2+0+2+2=(1+1)+(1+3)2+0+2+2=(1+1)+(1+3) 。
请提交满足条件的日期的总数量。
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
typedef long long LL;
const int N = 200010;
int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
bool value(int year,int month,int day){
if(month>12||month<1) return false;
if(day==0) return false;
if(month!=2){
if(day>days[month]) return false;
}
if(month==2){
if((year%4==0&&year%100!=0)||year%400==0){
if(day>29) return false;
}
else{
if(day>28) return false;
}
}
return true;
}
int su(int n){
int sum=0;
while(n>0){
sum+=n%10;
n/=10;
}
return sum;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int ans=0;
for(int i=19000101;i<=99991231;i++){
int x=i;
int year=x/10000;
int month=x/100%100;
int day=x%100;
if(value(year,month,day)){
int sum1=su(year);
int sum2=su(month);
int sum3=su(day);
if(sum1==sum2+sum3){
ans++;
}
}
}
cout<<ans;
return 0;
}