题目

使用莱布尼茨级数公式估算圆周率 π 的近似值,累加计算前 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 即得 π 近似值。

完整程序

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();

        double sum = 0.0;
        int sign = 1;

        // 莱布尼茨级数通项:分母为奇数 2k-1,符号正负交替
        for (int k = 1; k <= n; k++) {
            sum += (double) sign / (2 * k - 1);
            // 符号翻转:避免调用 Math.pow(-1, k) 带来额外开销
            sign = -sign;
        }

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

运行示例

输入:

1000

输出:

3.140593