输出21世纪中截止某个年份以来的所有闰年年份。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。
输入格式:
输入在一行中给出21世纪的某个截止年份。
输出格式:
逐行输出满足条件的所有闰年年份,即每个年份占一行。输入若非21世纪的年份则输出"Invalid year!"。若不存在任何闰年,则输出“None”。
输入样例1:
2048
输出样例1:
2004
2008
2012
2016
2020
2024
2028
2032
2036
2040
2044
2048
输入样例2:
2000
输出样例2:
Invalid year!
思路:用for循或者while循环,来枚举2001年到输入的年份20xx年之间的所有年份,然后判该年份year是不是闰年,判断掉件是if((year%4 == 0 && year%100 != 0) || (year%400 ==0))。
优化:考虑到闰年一定是能整出4的年份,所以我们并不需要遍历2001年到20xx年之间的所有年份,只需要遍历从2004年开始,每次递增4的年份。判断闰年时也可以去掉year%4 == 0这个条件
注意:21世纪是从2001年开始到2100年结束。
代码
#include <stdio.h>
int main () {
int endYear,year,flag = 0; //flag 为0表示没有找到闰年,为-1表示输入不合法,为1表示有找到闰年
scanf("%d", &endYear); // 输入截止年份
if (endYear < 2001 || endYear > 2100) flag = -1; // 如果截止年份不合法,标记flag=-1
else {
for (year = 2004; year <= endYear; year+=4) { // 遍历的恰好是4的整数被的年份
if (year%100 != 0 || year%400 == 0) { // 这里判断条件可以省略 year%4 == 0
printf("%d\n", year);
flag = 1; // 找到闰年,将flag标记为1
}
}
}
if (flag == -1) printf("Invalid year!");
else if (flag == 0) printf("None");
return 0;
}