7-15 计算圆周率 (15分)
程序员文章站
2022-05-14 09:29:25
...
根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
输入格式:
输入在一行中给出小于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;
}
上一篇: python shell与反弹shell
下一篇: java字符串拼接