一、原理
本题要求计算给定两个年份 a
和 b
之间(不包含 a
和 b
本身)所有闰年的年份之和。闰年的判断规则是:能被 400 整除的年份是闰年,或者能被 4 整除但不能被 100 整除的年份也是闰年。代码通过遍历 a + 1
到 b - 1
之间的所有年份,根据闰年判断规则筛选出闰年,并将这些闰年的年份值累加起来,最终输出累加和。
二、步骤
- 输入处理:
- 从标准输入读取两个整数
a
和b
,代表两个年份。 - 为了确保后续遍历范围的正确性,如果
a
大于b
,则交换a
和b
的值,保证a
小于等于b
。
- 从标准输入读取两个整数
- 初始化累加和:
- 定义一个整数变量
sum
,并初始化为 0,用于存储所有闰年年份的累加和。
- 定义一个整数变量
- 遍历年份范围并判断闰年:
- 使用
for
循环遍历从a + 1
到b - 1
的所有年份,循环变量为i
。 - 对于每个年份
i
,使用闰年判断条件i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)
进行判断:- 如果满足该条件,说明
i
是闰年,将i
的值累加到sum
中,即sum = sum + i
。
- 如果满足该条件,说明
- 使用
- 输出结果:
- 循环结束后,使用
cout
输出sum
的值,即a
和b
之间所有闰年年份的累加和。
- 循环结束后,使用
三、图示法表示步骤(以 a = 2000
,b = 2005
为例)
步骤 | 操作 | 详细说明 | ||
---|---|---|---|---|
1 | 输入处理 | 读取 a = 2000 ,b = 2005 ,由于 a < b ,不需要交换。 | ||
2 | 初始化累加和 | sum = 0 | ||
3 | 遍历年份范围并判断闰年 | |||
i = 2001 | 判断 `2001 % 400 == 0 | (2001 % 4 == 0 && 2001 % 100 != 0),结果为 false`,不进行累加。 | ||
i = 2002 | 判断 `2002 % 400 == 0 | (2002 % 4 == 0 && 2002 % 100 != 0),结果为 false`,不进行累加。 | ||
i = 2003 | 判断 `2003 % 400 == 0 | (2003 % 4 == 0 && 2003 % 100 != 0),结果为 false`,不进行累加。 | ||
i = 2004 | 判断 `2004 % 400 == 0 | (2004 % 4 == 0 && 2004 % 100 != 0),结果为 true, sum = sum + 2004 = 2004`。 | ||
4 | 输出结果 | 输出 sum 的值,即 2004。 |
四、代码关键行注释
#include<iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b; // 从标准输入读取两个年份 a 和 b
if(a > b){ // 如果 a 大于 b,交换 a 和 b 的值
int temp = a;
a = b;
b = temp;
}
int sum = 0; // 初始化累加和为 0
for (int i = a + 1; i <= b - 1; i++) { // 遍历 a + 1 到 b - 1 之间的所有年份
if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) { // 判断 i 是否为闰年
sum = sum + i; // 如果是闰年,将 i 累加到 sum 中
}
}
cout << sum << endl; // 输出累加和
return 0;
}
五、完整代码程序
完整代码就是上述代码:
#include<iostream>
using namespace std;
int main() {
int a, b;
cin >> a >> b;
if(a > b){
int temp = a;
a = b;
b = temp;
}
int sum = 0;
for (int i = a + 1; i <= b - 1; i++) {
if (i % 400 == 0 || (i % 4 == 0 && i % 100 != 0)) {
sum = sum + i;
}
}
cout << sum << endl;
return 0;
}
六、时间复杂度
代码中主要的操作是遍历 a + 1
到 b - 1
之间的所有年份,循环执行的次数为 b - a - 1
,因此时间复杂度为 ,即与两个年份之间的差值成正比。
七、总结
这段代码通过简单的循环和条件判断,实现了计算两个年份之间所有闰年年份之和的功能。代码逻辑清晰,易于理解,使用了正确的闰年判断规则。不过,代码没有对输入的年份进行有效性检查,例如输入的年份可能为负数或者不符合实际年份范围等情况。在实际应用中,可以添加输入验证逻辑,提高代码的健壮性。此外,对于较大的年份差值,该算法的效率可能会受到一定影响,但对于本题的数据规模通常是足够的。