废话不多说直接上源码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
int i = 2001, j = 1, t = 1,date=0,sum=0,a,b=1,num=0,z,n;
for (i = 2001;i <= 2021;i++) {
for (j = 1;j <= 12;j++) {
switch (j) { //采用switch多分支获取每个月的天数
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:date = 31;break;
case 4:
case 6:
case 9:
case 11:date = 30;break;
case 2:if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0)date = 29;else date = 28;
}
for (t = 1;t <= date;t++) {
z = i; //在循环内部存放年月日的变量是不可以被改变的,所以赋给其他变量再计算
a = t;
n = j;
sum = 0;
b = 1;
while (z != 0) { //遍历年号每一项
sum += z % 10;
z /= 10;
}
while (n != 0) { //遍历月份的每一项
sum+=n % 10;
n /= 10;
}
while (a != 0) { //遍历日期的每一项
sum += a%10;
a /= 10;
}
while (b*b < sum) { b++; } //判断是否为完全平方数
if (b*b == sum)num++;
}
}
}
printf("%d", num);
return 0;
}
答案:977