根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
2π = 1 + 31 + 3×52! + 3×5×73! + ⋯ + 3×5×7×⋯×(2n + 1)n! + ⋯
输入格式:
输入在一行中给出小于1的阈值。
输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
输入样例:
0.01
输出样例:
3.132157
代码:
#define _CRT_SECURE_NO_WARNINGS 1
2 #pragma warning(disable:6031)
3 #include <stdio.h>
4 #include <stdio.h>
5 int main() {
6 double x = 0;
7 scanf("%lf", &x);//输入小于1的阈值
8 double z = 1;
9 int i = 1;
10 long int j = 1; //把分子设成超长整形,可能会超出整型范围
11 double s = 1;
12 //for循环判断条件:最后一项的值大于等于给定阈值
13 for (i = 1; j / z >= x; i++) {
14 z = z * (2 * i + 1); //算出分母
15 j *= i; //算出分子
16 s += j / z; //和
17 }
18 // 2π = 1 + 31 + 3×52! + 3×5×73! + ⋯ + 3×5×7×⋯×(2n + 1)n! + ⋯
19 printf("%.6lf\n", s*2); //输出的是2Π
20 return 0;
21 }