如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。
例如:20212021 年 66 月 55 日的各位数字之和为 2+0+2+1+6+5=162+0+2+1+6+5=16,而 1616 是一个完全平方数,它是 44 的平方。所以 20212021 年 66 月 55 日是一个完全日期。
例如:20212021 年 66 月 2323 日的各位数字之和为 2+0+2+1+6+2+3=162+0+2+1+6+2+3=16,是一个完全平方数。所以 20212021 年 66 月 2323 日也是一个完全日期。
请问,从 20012001 年 11 月 11 日到 20212021 年 1212 月 3131 日中,一共有多少个完全日期?
#include <bits/stdc++.h>
using namespace std;
int qiuhe(int x) {
int ans = 0;
while (x) {
ans += x % 10;
x /= 10;
}
return ans;
}
bool ju(int y) {
if (y < 0) return false;
int hj = static_cast<int>(sqrt(y));
return hj * hj == y;
}
int month_days[] = {31,28,31,30,31,30,31,31,30,31,30,31};
int main() {
int jk = 0;
for (int i = 20010101; i <= 20211231; ++i) {
int year = i / 10000;
int month = (i / 100) % 100;
int day = i % 100;
if (month < 1 || month > 12) continue;
int days = month_days[month - 1];
if (month == 2) {
bool leap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
days = leap ? 29 : 28;
}
if (day < 1 || day > days) continue;
int sum = qiuhe(i);
if (ju(sum)) {
jk++;
}
}
cout << jk << endl;
return 0;
}