根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。

输入格式:

输入在一行中给出小于1的阈值。

输出格式:

在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。

输入样例:

  1. 0.01

输出样例:

  1. 3.132157

思路

等号右边是一系列的累加,当最后一项小于阈值时,我们就可以计算结果了。
分子是阶乘形式,我们没必要用递归算出值再加起来,而是算好某一项,再累乘求和即可。分母也是同样的处理方法。


代码

  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4. int main() {
  5. double eps = 0;
  6. cin >> eps;
  7. double fenzi = 1, fenmu = 1, pi = 1;
  8. double item = 1;
  9. while(fenzi / fenmu > eps) {
  10. fenzi *= item;
  11. fenmu *= 2.0 * item + 1.0;
  12. item += 1.0;
  13. pi += fenzi / fenmu;
  14. }
  15. printf("%.6lf", pi * 2);
  16. return 0;
  17. }