一、闰年判断
年分问题必须会判断闰年:year % 400 == 0 || (year % 4 == 0 && year % 100 != 0)
只要记住一个口诀:4年一润,百年不闰,400年又润。意思是每四年是一个闰年,但是100年的时候即使是4的倍数但仍然不是闰年,是400年的倍数又是闰年。
建议取官网多做题,年份题大多都很简单,而且大多数都是填空题,掌握方法轻松拿下5-10分
二、做题
题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
如果一个日期中年月日的各位数字之和是完全平方数,则称为一个完全日期。
例如: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<iostream>
#include<string>
using namespace std;
int main()
{
int month[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
int all = 0,a,b,c,sum;
for (int y = 1; y <= 21; y++)
{
month[2] = 28;
if ((2000+y) % 400 == 0 || ((2000+y) % 4 == 0 && (2000+y) % 100 != 0))month[2] = 29;//闰年的时候把2月份变成29天
for (int m = 1; m <= 12; m++)
{
for (int d = 1; d <= month[m]; d++)
{
a = y/10+y%10;//最高也只是二位数,除以十得到十位数,取10的模得到个位
b = m/10+m%10;//即使是个位数除 10也为0不用担心
c = d/10+m%10;
sum = 2+a+b+c;
//年分在2001/1/1 - 2021/12/31,但是最大值是2019/9/29 ,所以总和的范围是 5---32
if(sum == 9||sum == 16||sum == 25)all ++;//在这个范围能被开方的就这三个数字
}
}
}
cout<<all;
return 0;
}