题目

从标准输入读入一个正整数 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