题解
判断闰年
1 条题解
-
0
解题思路
闰年判断是一个经典问题,规则有一句口诀:"四年一闰,百年不闰,四百年再闰"。
用编程语言翻译成条件:闰年要满足下面两个条件中的任意一个:
- 能被 4 整除,并且不能被 100 整除:n % 4 == 0 并且 n % 100 != 0。这对应"四年一闰、百年不闰"。
- 能被 400 整除:n % 400 == 0。这对应"四百年再闰"。
两个条件用 ||(或者)连起来:如果 (n % 4 == 0 && n % 100 != 0) || n % 400 == 0 成立,就是闰年,输出 YES;否则输出 NO。
为什么规则这么复杂?因为地球绕太阳一圈实际约 365.2422 天,公历用"每四年多加一天"来补,但这样又会多补一点,所以规定整百的年份必须能被 400 整除才算闰年。比如 1900 不是闰年(1900 % 400 != 0),2000 是闰年(2000 % 400 == 0)。
验证几个例子:2020 % 4 == 0 且 2020 % 100 != 0,所以 2020 是闰年,输出 YES,和样例一致。1900 能被 4 整除也能被 100 整除,但不能被 400 整除,所以不是闰年。
注意:&&(并且)的优先级比 ||(或者)高,但为了让人一眼看清顺序,最好还是加上括号。
参考代码
#include <iostream> using namespace std; int main() { int n; // 年份 cin >> n; // 闰年条件: // 条件1:能被 4 整除并且不能被 100 整除 // 条件2:能被 400 整除 // 满足任意一个就是闰年 if ((n % 4 == 0 && n % 100 != 0) || n % 400 == 0) { cout << "YES" << endl; // 是闰年 } else { cout << "NO" << endl; // 不是闰年 } return 0; }复杂度分析
只读入 1 个数,做几次取余运算和逻辑判断,运算次数固定,和年份的大小无关。时间复杂度和空间复杂度都是 O(1)。
- 1