top1编程
← 返回题目
题解

判断闰年

1 条题解

  • 0
    @ 2026-8-4 9:54:08

    解题思路

    闰年判断是一个经典问题,规则有一句口诀:"四年一闰,百年不闰,四百年再闰"。

    用编程语言翻译成条件:闰年要满足下面两个条件中的任意一个:

    1. 能被 4 整除,并且不能被 100 整除:n % 4 == 0 并且 n % 100 != 0。这对应"四年一闰、百年不闰"。
    2. 能被 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