黑马程序员技术交流社区
标题: 关于闰年 [打印本页]
作者: 18503582292 时间: 2015-9-18 18:29
标题: 关于闰年
int year;
if (!(year%4)&&year%100||!(year%400)) {
printf("%d年是闰年\n",year);
}else{printf("%d年不是闰年\n",year);}}
闰年不是就是四年轮回一次么?而且有前面的与,后面的或就短路了呀?
谁能给我解答一下。
万分感谢!
作者: 毛强 时间: 2015-9-18 21:10
能被4整除且不被100整除,或者能被400整除叫做闰年
作者: 18503582292 时间: 2015-9-18 22:57
我是想要为什么这样写,而不是这是什么
作者: 18503582292 时间: 2015-9-18 22:59
不是直接有一个能被4整除就OK了吗?
作者: 18503582292 时间: 2015-9-18 23:02
才知道原来闰年是这样计算的。无知了。
作者: 18503582292 时间: 2015-9-18 23:06
地球绕太阳转一周的实际时间是365天5时48分46秒。如果一年只有365天,那么每年就多出5个小时。4年多出的23小时15分4秒,差不多就等于1天。于是决定每四年增加1天。但是,它比一天24小时又少了约45分钟,如果每100年有25个闰年的话,就少了18时43分20秒,这就差不多等于1天了,这显然不合适。
可以算出,每年多出5小时48分46秒,100年就多出581小时16分40秒。而25个闰年需要25*24=600小时。581小时16分40秒只够24个闰年(24*24=576小时),于是决定每100年只安排24个闰年(世纪年不作闰年)。但是这样每100年又多出了5小时16分40秒(581小时16分40秒-576小时),于是又决定每400年增加一个闰年。这样就比较接近实际情况了。
根据以上的,决定闰年按照以下的计算规则:闰年应能被4整除(如2004年是闰年,而2001年不是闰年),但不是所有被4整除的年份都是闰年。在能被100整除的年份中,又同时能被400整除的年份才是闰年(如2000年是闰年),能被100整除而不能被400整除的年份(如1800、1900、2100)不是闰年。这是国际公 认的规则。只说“能被4整除的年份就是闰年”是不准确的
原来是这样的
作者: 大宝820 时间: 2015-9-18 23:33
18503582292 发表于 2015-9-18 23:06
地球绕太阳转一周的实际时间是365天5时48分46秒。如果一年只有365天,那么每年就多出5个小时。4年多出的23 ...
好复杂啊
作者: wx_s1oSwEOC 时间: 2015-9-19 23:42
if ( (year % 4 == 0 && year % 100 != 0)|| (year % 400 == 0)) //判断是否为闰年 printf("\n%d is a leap year", year);
作者: jsh_513 时间: 2015-9-21 08:31
对的,是这样计算的。。
作者: 安若曦 时间: 2015-9-21 09:10
[code]// 不能被100整除且能被4整除,或者能被400整除,是闰年
if ((((year%100) != 0) && (0 == (year%4))) || (0 == (year%400))) {
return 1;
}
// 其余是平年
return 0;
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |