题目
从标准输入读入一个正整数 n,计算并输出 1 到 n 之间所有偶数的和。
输入格式:一行输入一个正整数 n。
输出格式:输出一个整数表示所有偶数之和,末尾换行。
数据范围与约定:1 ≤ n ≤ 108。
思路与算法
1. 偶数判定与步长优化
方法一:遍历 1 到 n,通过 i % 2 == 0 判定偶数后累加;
方法二(更优):直接以偶数 2 为起点,循环步长设为 2(i += 2),循环次数减半,效率更高。
2. 溢出防范
偶数累加和的增长速度与平方同阶,大输入下同样必须使用 long long 保存累加值。
完整程序
#include <stdio.h>
int main(void)
{
int n;
long long sum = 0;
if (scanf("%d", &n) != 1 || n < 1) {
return 1;
}
// 步长设为 2(i += 2),直接遍历所有偶数,比逐个判断 i % 2 == 0 循环次数减半
for (int i = 2; i <= n; i += 2) {
sum += i;
}
printf("%lld\n", sum);
return 0;
}运行示例
输入:
6输出:
12