判断闰年

GitHub跳转原题关系图返回列表

按公历规则做一次布尔判断:被 4 整除且(非整百年或被 400 整除)即闰年,O(1) 输出 Y/N。

OJ: roj

题目 ID: 1055

难度:入门

标签:分支模拟

创建: 2026-09-29 16:34

更新: 2026-10-04 23:43

题目描述

判断公元 aa 年(0<a<30000 < a < 3000)是否为公历闰年:是则输出 Y,否则输出 N。输入只有一行一个整数 aa,输出一行 Y 或 N。样例:输入 2006,输出 N。

思路

公历闰年规则是三层特例链:能被 4 整除是闰年,但整百年(被 100 整除)必须再被 400 整除才是闰年,即 a mod 4=0∧(a mod 100≠0∨a mod 400=0)a \bmod 4 = 0 \land (a \bmod 100 \neq 0 \lor a \bmod 400 = 0),注意 1900 是平年、2000 是闰年。时间空间均为 O(1)O(1)。

参考代码

Python 版:

python
#!/usr/bin/env python3
# Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
# rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
# rainboy的学习导航网站: https://idx.roj.ac.cn
# create_at: 2026-09-29 16:34
# update_at: 2026-09-29 16:34

import sys


def solve() -> None:
    year = int(sys.stdin.buffer.read())                      # 题面的 a
    # 公历闰年规则:被 4 整除是闰年;但被 100 整除时例外,需再被 400 整除。
    leap = year % 4 == 0 and (year % 100 != 0 or year % 400 == 0)
    print('Y' if leap else 'N')


if __name__ == "__main__":
    solve()

C++ 版(同一算法):

cpp
/**
 * Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
 * rbook: -> https://rbook.roj.ac.cn  https://rbook2.roj.ac.cn
 * rainboy的学习导航网站: https://idx.roj.ac.cn
 * create_at: 2026-10-04 23:43
 * update_at: 2026-10-04 23:43
 */

#include <cstdio>
typedef long long ll;

ll a; // 题面中的公元年份

int main() {
    scanf("%lld", &a);
    // 公历闰年规则:能被 4 整除才是候选;
    // 但整百年(能被 100 整除)必须再被 400 整除才是闰年(1900 平年、2000 闰年)。
    if (a % 4 == 0 && (a % 100 != 0 || a % 400 == 0))
        printf("Y\n");
    else
        printf("N\n");
    return 0;
}