题目描述**。**
如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。
例如:2021 年 6 月 5 日的各位数字之和为 2+0+2+1+6+5=16,而 16 是一个完全平方数,它是 4 的平方。所以 2021 年 6 月 5 日是一个完全日期。
例如:2021 年 6 月 23 日的各位数字之和为 2+0+2+1+6+2+3=16,是一个完全平方数。所以 2021 年 6 月 23 日也是一个完全日期。
请问,从 2001 年 1 月 1 日到 2021 年 12 月 31 日中,一共有多少个完全日期?
cpp
#include<iostream>
using namespace std;
int day[13]={0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int ans;
int check(int a, int b, int c)
{
int temp = a%10 + a/10%10 + a/100%10 + a/1000 + b%10 + b/10 + c%10 + c/10;
//日期2001.1.1数字和最小是5,最大日期2019.9.29数字和是32
if(temp==9 || temp==16 || temp==25)
{
return 1;
}
return 0;
}
int main()
{
for(int i=2001; i<=2021; ++i)
{
day[2]=28; //重置2月天数
for(int j=1; j<=12; ++j)
{
if(i%4==0&&i%100!=0 || i%400==0) day[2]=29;
for(int k=1; k<=day[j]; ++k)
{
if(check(i, j, k)) ans++;
if(i==2021 && j==12 && k==31)
{
cout<<ans;
return 0;
}
}
}
}
return 0;
}