按公历规则做一次布尔判断:被 4 整除且(非整百年或被 400 整除)即闰年,O(1) 输出 Y/N。
OJ: roj
题目 ID: 1055
难度:入门
标签:分支模拟
创建: 2026-09-29 16:34
更新: 2026-10-04 23:43
题目描述
判断公元 Y,否则输出 N。输入只有一行一个整数 Y 或 N。样例:输入 2006,输出 N。
思路
公历闰年规则是三层特例链:能被 4 整除是闰年,但整百年(被 100 整除)必须再被 400 整除才是闰年,即
参考代码
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;
}