题目

使用莱布尼茨级数公式估算圆周率 π 的近似值,累加计算前 n 项。公式为:π/4 = 1 - 1/3 + 1/5 - 1/7 + ...

输入格式:一行输入一个正整数 n,表示累加项数。

输出格式:输出保留 6 位小数的浮点数,表示估算出的 π 值,末尾换行。

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

思路与算法

1. 级数通项规律
第 i 项(i 从 1 开始)的分母为 2*i - 1,符号正负交替出现。通项可表示为 (-1)^(i-1) / (2*i - 1)。

2. 浮点精度与符号迭代
使用 double 保证高精度浮点累加。符号交替可通过 sign = -sign 在循环中翻转,避免调用开销较大的 pow() 函数。最后将累加和乘以 4 即得 π 近似值。

完整程序

#include <stdio.h>

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

    double sum = 0.0;
    int sign = 1;

    // 莱布尼茨级数通项:分母为奇数 2k-1,符号正负交替
    for (int k = 1; k <= n; k++) {
        // 1.0 强制转为浮点除法,保留小数精度
        sum += sign * 1.0 / (2 * k - 1);
        // 符号翻转:避免调用 pow(-1, k) 带来额外开销
        sign = -sign;
    }

    // 级数收敛于 π/4,累加结果乘以 4 得到 π 的近似值
    printf("%.6f\n", sum * 4.0);
    return 0;
}

运行示例

输入:

1000

输出:

3.140593