1 条题解
-
0
📝 题目大意
给定一个年份 (),判断该年是否为闰年——闰年有 天,平年有 天。
💡 解题思路
-
题目分析:本题本质上就是判断格里高利历(Gregorian calendar)下的闰年。数据范围 非常小,直接 判断即可。
-
算法推导:格里高利历的闰年规则为:
- 若年份能被 整除,则是闰年;
- 否则,若年份能被 整除但不能被 整除,则是闰年;
- 其余情况均为平年。
标准代码中用一个
if语句直接实现了该逻辑:if (n % 400 == 0 || (n % 4 == 0 && n % 100 != 0)) cout << 366; else cout << 365;注意
||的短路求值:先判断n % 400 == 0(如 年),若不成立再判断n % 4 == 0 && n % 100 != 0(如 年),其余情况输出 (如 、 年)。 -
边界与细节:
- 能被 整除的年份(如 )同时也是 和 的倍数,但按闰年规则应输出 ,因此
n % 400 == 0必须放在||前面优先判断。 - 能被 整除但不能被 整除的年份(如 )是平年,输出 。
- 输入范围 较小,使用
int即可。
- 能被 整除的年份(如 )同时也是 和 的倍数,但按闰年规则应输出 ,因此
⏱️ 复杂度分析
- 时间复杂度:,仅做常数次取模和比较运算。
- 空间复杂度:,仅使用常数个变量。
💻 标准代码 (C++)
#include<bits/stdc++.h> using namespace std; int main(){ int n; cin >> n; // 格里高利历闰年规则: // 1. 能被400整除 → 闰年(366天) // 2. 能被4整除但不能被100整除 → 闰年(366天) // 3. 其余 → 平年(365天) if(n % 400 == 0 || ( n % 4 == 0 && n % 100 != 0)) cout << 366; else cout << 365; return 0; } -
- 1
信息
- ID
- 814
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- (无)
- 递交数
- 1
- 已通过
- 1
- 上传者