题解:洛谷 P5711 闰年判断
【题目来源】
【题目描述】
输入一个年份,判断这一年是否是闰年,如果是输出 \(1\),否则输出 \(0\)。
【输入】
输入一个正整数 \(n\),表示年份。
【输出】
输出一行。如果输入的年份是闰年则输出 \(1\),否则输出 \(0\)。
【输入样例】
1926
【输出样例】
0
【核心思想】
-
问题分析:输入一个年份,判断是否为闰年。闰年规则:能被 \(4\) 整除但不能被 \(100\) 整除,或者能被 \(400\) 整除。
-
算法选择:
- 逻辑条件判断:将闰年规则转化为布尔表达式直接判断
-
关键步骤:
- 读入数据:
cin >> year - 闰年判断:
- 条件:
year % 4 == 0 && year % 100 != 0 || year % 400 == 0 - 优先级:
%>==/!=>&&>|| - 含义:(能被 4 整除 且 不能被 100 整除) 或 (能被 400 整除)
- 条件:
- 输出结果:是闰年输出
1,否则输出0
- 读入数据:
-
时间/空间复杂度:
- 时间复杂度:\(O(1)\),单次模运算和逻辑判断
- 空间复杂度:\(O(1)\),仅需一个整型变量
-
闰年判断的核心思想:
- 格里高利历规则:普通年份每 4 年一闰,但世纪年必须被 400 整除才闰(如 1900 不闰,2000 闰)
- 运算符优先级:
&&优先级高于||,表达式可省略括号,但理解时应注意分组 - 短路求值:若
year % 4 != 0则前半部分为假,继续判断year % 400 == 0 - 适用于日期计算、历法转换、条件判断类入门问题
【算法标签】
入门 #模拟
【代码详解】
#include <bits/stdc++.h> // 包含标准库头文件(万能头文件)
using namespace std; // 使用标准命名空间
/**
* 主函数 - 程序入口
* @return 程序执行状态码(0表示成功)
*/
int main()
{
int year; // 定义年份变量
cin >> year; // 输入年份
// 方法一(注释掉的原始方案):分步判断闰年条件
// if(year%4==0 && year%100!=0) cout << 1; // 普通闰年判断
// else if(year%100==0 && year%400==0) cout << 1; // 世纪闰年判断
// else cout << 0; // 非闰年情况
// 方法二(实际采用的方案):合并判断闰年条件
if (year%4==0 && year%100!=0 || year%400==0) // 合并判断普通闰年和世纪闰年
{
cout << 1; // 是闰年输出1
}
else
{
cout << 0; // 不是闰年输出0
}
return 0; // 程序正常结束
}
【运行结果】
1926
0
浙公网安备 33010602011771号