根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
$$
\frac{\pi}{2} = 1 + \frac{1}{3} + \frac{2!}{3 \times 5} + \frac{3!}{3 \times 5 \times 7} + \cdots + \frac{n!}{3 \times 5 \times 7 \times \cdots \times (2n + 1)} + \cdots
$$
输入格式:
输入在一行中给出小于1的阈值。
输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
输入样例:
1 | 0.01 |
输出样例:
1 | 3.132157 |
代码:
1234567891011121314151617181920212223242526272829303132333435363738 | double factorial(int n);//计算阶乘int main(){ float threshold = 0;//阈值 float input = 0;//输入 float sum = 0;//结果 float numerator = 0;//分子 float denominator = 1;//分母 scanf("%f",&input); int i = 1; do { int x = 1; int j = 1;//计算分母循环用 for (j = 1; j<=i;j++)//计算分母 { denominator = denominator * x; x = x + 2; } numerator = factorial(i-1);//计算分子 threshold = numerator/denominator;//计算阈值(当前的最后一项) sum = sum + threshold;//计算和 i++; denominator = 1; } while (threshold > input); sum = sum * 2; printf("%.6f",sum);}double factorial(int n)//计算阶乘{ double result = 1; int i = 0; for (i = 1; i <= n; i++) { result = result * i; } return result;} |