关于闰年那些事
判断某一年是否是闰年几乎是所有编程语言的基础练习题之一,而我们必然也熟知其规则:
- 整除但4不能整除100
- 整除100又能整除400
这就是俗语中的“四年一闰,百年不闰,四百年再润”,我们当然可以根据这个规则编写程序判断闰年,但你知道为什么这样规定闰年的算法么?
事实上,闰年是为了弥补因人为历法规定,造成的年度天数与地球实际公转周期的时间差而设立的。所以闰年有366天。
那么具体是怎么弥补的呢?
我们知道,平年一年只有365天,而实际上地球绕太阳的公转周期为365天5小时48分46秒。即一回归年。所以公历的每一年都比回归年短0.2422天,四年累计起来,共短0.9688天。
大概就是一天,所以为了弥补这一天的时间差。给2月加上1天,就有了闰年。这样一来,每四年里就有一个闰年,3个平年。这就是四年一闰。
那么百年不闰,四百年再闰又是怎么回事呢?
是这样的,刚才说四年累计起来的时间差只有0.9688天,这比我们给闰年增加的一天还少0.0312天,所以每四年就会多出0.0312天。这样400年后,就会比实际天数多出3.12天。所以我们必须在这400年中少设3个闰年。这样公历年的平均长度与回归年就近似了。
那这3个闰年怎么少呢?
很简单,给百年除以400即可,比如2000-2400这400年:
- 2000/400=5
- 2100/400=5.25
- 2200/400=5.5
- 2300/400=5.75
- 2400/400=6
可以发现,正好有3个不能整除的整百年。所以规定年份是整百数的必须是400的倍数才是闰年。这就是百年不闰,四百年才闰的规定。
你明白了吗?
当然,根据规则,我们就可以编写代码判断了:
1 | int main() |