1. 程式人生 > 其它 >7-15 計算圓周率 (15分)

7-15 計算圓周率 (15分)

技術標籤:Base

根據下面關係式,求圓周率的值,直到最後一項的值小於給定閾值。
在這裡插入圖片描述

輸入格式:
輸入在一行中給出小於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; }