1. 闰年判断程序实现与优化
1.1 闰年判断的基本原理
判断一个年份是否为闰年是编程入门常见的练习题目。根据格里高利历(公历)的规则,闰年的判定需要满足以下条件之一:
- 能被400整除的年份是闰年
- 能被4整除但不能被100整除的年份是闰年
这两个条件看似简单,但包含了历法演变的智慧。1582年教皇格里高利十三世引入格里高利历时,为了解决儒略历每128年就会多出1天的误差,特别制定了这个复杂的规则。
注意:很多人容易忽略"能被400整除"这个条件,导致对1700、1800、1900等年份判断错误,这些年份虽然能被4整除,但因为也能被100整除且不能被400整除,所以不是闰年。
1.2 基础实现代码解析
原始代码提供了一个基本的实现方案:
cpp复制#include<iostream>
using namespace std;
bool judgeyear(int n) {
if((n%400==0&&n%100==0) || n%4==0)
return true;
else
return false;
}
int main() {
int year;
cin>>year;
if(judgeyear(year)==1)
cout<<year<<"是闰年";
else
cout<<year<<"不是闰年";
return 0;
}
这段代码虽然功能正确,但存在几个可以优化的地方:
- 条件表达式
(n%400==0&&n%100==0)中的n%100==0是多余的,因为能被400整除的数必然能被100整除 judgeyear函数中的if-else结构可以直接简化为返回逻辑表达式的结果- 主函数中的
==1比较不够优雅,可以直接使用布尔值
1.3 优化后的实现方案
改进后的代码如下:
cpp复制#include<iostream>
using namespace std;
bool isLeapYear(int year) {
return (year % 400 == 0) || (year % 4 == 0 &&
