题目

从标准输入读入一个正整数 n,计算并输出 1 到 n 的自然数累加和(即 1 + 2 + ... + n)。

输入格式:一行输入一个正整数 n。

输出格式:输出一个整数表示累加和,末尾换行。

数据范围与约定:1 ≤ n ≤ 108。

思路与算法

1. 循环累加逻辑
初始化累加变量 sum = 0,使用 for 循环让计数器 i 从 1 遍历到 n,每轮将 i 累加至 sum。

2. 核心考点:整型溢出防范
当 n = 105 时,累加和约为 5×109,已超出 32 位带符号整型 int 的表示范围(约 2.14×109)。因此累加变量 sum 必须使用 64 位整型 long long。

完整程序

#include <stdio.h>

int main(void)
{
    int n;
    // 累加和增长快,当 n 达到 10^5 时累加和超过 2×10^9,必须使用 long long 避免整型溢出
    long long sum = 0;

    if (scanf("%d", &n) != 1 || n < 1) {
        return 1;
    }

    // 从 1 循环累加到 n
    for (int i = 1; i <= n; i++) {
        sum += i;
    }

    printf("%lld\n", sum);
    return 0;
}

运行示例

输入:

5

输出:

15

其它写法

下面每种写法都是完整程序,输入输出格式与正文一致,便于对照。

高斯求和公式

程序:

#include <stdio.h>

int main(void)
{
    int n;
    if (scanf("%d", &n) != 1 || n < 1) {
        return 1;
    }
    long long sum = (long long)(n / 2) * (n + 1);
    if (n % 2) {
        sum = (long long)n * ((n + 1) / 2);
    }
    printf("%lld\n", sum);
    return 0;
}

输入:

5

输出:

15