7-15 計算圓周率 (15分)
阿新 • • 發佈:2021-01-08
技術標籤: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;
}