练习3-5 输出闰年 (15 分)
输出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!
思路:2000年属于20世纪,21世纪从2001年开始,然后利用提给的判断闰年方法进行判断。
代码如下:
#include<stdio.h> int main () { int year, i, count=0; scanf("%d",&year); if(year<=2000||year>2100) { printf("Invalid year!"); return 0; } for (i=2001;i<=year;i++) { if (i%4==0&&i%100!=0) { count++; printf("%d\n",i); } } if(count==0) printf("None"); return 0; }
科普:
闰年:闰年是比普通年分多出一段时间的年分,在各种历法中都有出现,目的是为了弥补人为规定的纪年与地球公转产生的差异。
闰年规则:目前使用的格里高利历闰年规则如下:
- 公元年分除以4不可整除,为平年。
- 公元年分除以4可整除但除以100不可整除,为闰年。
- 公元年分除以100可整除但除以400不可整除,为平年。
- 公元年分除以400可整除但除以3200不可整除,为闰年。
每逢闰年,2月有29日,平年的2月为28日。
因此,1977年为平年,1980年逢4的倍数为闰年,1900年逢100的倍数但非400的倍数故为平年,2000年逢400的倍数又为闰年。
此外,如依照现有太阳年的长度与上述闰年规则,每8000年又约差一日,因此约翰·赫歇尔提议每逢4000的倍数不闰,如公元4000年。但距此年分来临尚有约二千年之遥,因此还未曾真正纳入规则或实施过。又由于地球公转速度的不稳定与众多影响因素,届时是否需要纳入此规则有待商榷。
公元前的闰年:
公元前之闰年出现在前1, 前5, 前9, 前13, ...,或记作1 BC,5 BC,9 BC,13 BC,...,或在数轴上记作0,-4,-8,-12,...。 判断是否闰年,须将年份值减1再以“除以4”计算,或以数轴记法表示时直接计算(正负性不影响是否整除)。(因为没有公元0年这一年(除非临时约定,并注明对应等式),所以公元前1, 2, 3, 4, ... 年应该在数学数轴上对应着(但不是,或不应该在历法上称)公元0, -1, -2, -3, ... 年,而公元前1, 5, 9, 13, ... 年在数学数轴上对应着0, -4, -8, -12, ... 年,为4的倍数)。 记住:临时约定的数学“0”年,等于天文学固有的“0”年,等于历法公元前一年。
来源:维基百科-闰年(https://zh.wikipedia.org/wiki/%E9%97%B0%E5%B9%B4)
原文地址:https://www.cnblogs.com/IT-Lead-The-World/p/10349731.html