C/C++ 如何判断闰年,对判断闰年条件的疑惑解答
2018-03-24 12:52
357 查看
C/C++ 如何判断闰年,对判断闰年条件的疑惑解答
当你看到这条博客时,想必跟我当时一样也是对闰年的判断条件感到疑惑吧,而我们都知道(小学老师教的)闰年就是年份除以4,除的尽的就为闰年。可我们万万没想到闰年的判断条件竟是(year % 4 == 0 && year % 100 !=0)||(year % 400 ==0 ),而不是 year % 4 == 0 !!!为什么会这样呢?
以下原因来自百度百科:
产生的原因:
通常的解释是说一年有多少天多少小时多少分,取整数365还有多余的,累积达到一天24小时后,就多加一天的年是闰年。
最根本的原因是:
地球绕太阳运行周期为365天5小时48分46秒(合365.24219天)即一回归年(tropical year)。公历的平年只有365日,比回归年短约0.2422 日,所余下的时间约为每四年累计一天,故第四年于2月末加1天,使当年的历年长度为366日,这一年就为闰年。现行公历中每400年有97个闰年。按照每四年一个闰年计算,平均每年就要多算出0.0078天,这样经过四百年就会多算出大约3天来。因此每四百年中要减少三个闰年。所以公历规定:年份是整百数时,必须是400的倍数才是闰年;不是400的倍数的世纪年,即使是4的倍数也不是闰年。
这就是通常所说的:四年一闰,百年不闰,四百年再闰。 例如,2000年是闰年,2100年则是平年。
如果不好理解,请看下面推算:
一回归年:365.24219日 公历平年:365日 一年相差:0.2422 日 四年相差:0.9688日(约为一天)这时2月日数需加一。然而却多算了(1-0.9688)=0.0312日 如果将这误差放大: 若四百年(100个闰年):(0.0312*100=3.12 ),则算多了3天。此时要减去三个闰年(即每四百年,需减去3个闰年)。 故,年份是整百数时,必须是400的倍数才是闰年;不是400的倍数的世纪年,即使是4的倍数也不是闰年。 请记住一句话:四年一闰,百年不闰,四百年再闰。
代码:
#include <stdio.h> using namespace std; int main() { int year; printf("Please a year:\n"); scanf("%d",&year); /*判断是否是闰年*/ if((year % 4 == 0 && year % 100 !=0)||(year % 400 ==0 )) printf("%d is leap year!\n",year); else printf("%d is not leap year!\n",year); return 0; }
看懂之后,是不是觉得自己发现了新大陆了呢,在他人还局限于小学的知识时,自己却早一步发现了真谛所在。就好像我们初中学的物理一样,路程=速度x时间。结果到了高中,却发现这是错误的。应该是: 位移(s)=速度(v)*时间(t)。
相关文章推荐
- java生产者消费者PV操作为中,wait判断条件为何是while不是if疑惑解答
- VC6 C++控制台程序如何判断用户输入的是什么数字[必须小于128]?
- 如何判断一个程序是C编译的还是C++编译的
- C++ 计166-1 闰年的判断
- 作业3(4)循环输入多个年份 year,判断该年是否为闰年。判断闰年的条件是:能被 4 整除但不能被100 整除,或者能被 400 整除。输入-1退出程序执行
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的
- 【面试题】条件语句:判断是不是闰年
- C++如何判断大小端
- 如何判断一段程序是由C编译,还是由C++编译?
- stackoverflow | C/C++ | 如何不使用循环和判断语句实现“打印从1到100之间的数字”
- 作业3-4 循环输入多个年份 year,判断该年是否为闰年。判断闰年的条件是:能被 4 整除但不能被100 整除,或者能被 400 整除。输入-1退出程序执行
- 如何在SQL中实现条件判断功能?
- 如何判断 linux内核 中 如何判断 条件编译
- 如何判断一段程序是由C 编译程序还是由C++编译程序编译的?
- myBatis查询某个时间区间数据<if test=""> 如何写判断条件,and 里面的内容怎么写?
- C++如何判断运算结果溢出
- 用c++编写闰年的判断基础程序
- C++泛型编程技巧 - 如何判断输入类型是否定义了特定的成员函数
- Adobe面试题“不使用/,%,+和*,如何判断一个数能否被3整除”的解答