欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

7-15 计算圆周率 (15分)

程序员文章站 2022-05-14 09:29:25
...

根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
7-15 计算圆周率 (15分)

输入格式:
输入在一行中给出小于1的阈值。

输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

输入样例:

0.01

输出样例:

3.132157

不要硬算阶乘,会超long long范围。分母都是奇数,分子是n!,分母和分子有部分重复,当为奇数且该数小于等于n时,就消掉,不计算就行了
#include <iostream>
using namespace std;

typedef long long ll;

ll fun(ll i) {
    ll sum = 1;
    for (ll j = 2; j <= i; j++) {
        if (j % 2 == 0)
            sum *= j;
    }
    return sum;
}

int main() {
    double minx;
    cin >> minx;
    double res = 1;
    for (ll i = 1;; i++) {
        ll mu = 1;
        for (ll j = 3; j <= 2 * i + 1; j += 2) {
            if (j > i)
                mu *= j;
        }
        ll zi = fun(i);
        res += zi * 1.0 / mu;
        if (zi * 1.0 / mu < minx)
            break;
    }
    printf("%.6lf", res * 2);
    return 0;
}
相关标签: Base