top1编程
← 返回题目
题解

计算圆周率

1 条题解

  • 0
    @ 2026-8-3 18:46:46

    解题思路

    题目用格雷戈里-莱布尼茨级数计算圆周率:

    π = 4/1 - 4/3 + 4/5 - 4/7 + 4/9 - ...

    也就是第 i 项是 4 ÷ 奇数,奇数项相加、偶数项相减。这样不断迭代,每一项都比上一项更接近 π。题目要求迭代 500000 次后保留 6 位小数输出。

    用一个 double 变量累加,i 从 1 到 500000,每一项是 4.0 / (2*i-1),i 是奇数就加、偶数就减。最后用 printf("%.6lf") 输出 6 位小数。

    参考代码

    #include <iostream>
    #include <cstdio>
    using namespace std;
    
    int main() {
        double pi = 0;
        // π = 4/1 - 4/3 + 4/5 - 4/7 + ... 一直迭代500000次
        for (int i = 1; i <= 500000; i++) {
            double t = 4.0 / (2 * i - 1);   // 第i项:4除以奇数
            if (i % 2 == 1) pi += t;        // 奇数项用加
            else pi -= t;                   // 偶数项用减
        }
        printf("%.6lf\n", pi);   // 保留6位小数
        return 0;
    }
    

    复杂度分析

    迭代 n 次(n=500000),每次常数运算,时间复杂度 O(n);额外空间复杂度 O(1)。

    • 1