7-15 计算圆周率 (15 分)
根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
2π=1+31+3×52!+3×5×73!+⋯+3×5×7×⋯×(2n+1)n!+⋯
输入格式:
输入在一行中给出小于1的阈值。
输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
输入样例:
0.01
输出样例:
3.132157
思路:开始一点思路都没有,果然是我太菜了,在b站搜到了讲解。 分子分母分开处理,分子计算阶乘,第一项不用计算,从第二项开始处理,最后输出的时候因为公式变换将2挪到右边,所以需要乘2.
代码:
#include "iostream"
using namespace std;
int main(){
double n;
double i=1.0;
double fz=1.0,fm=1.0;
double pi=1.0;
scanf("%lf",&n);
while(fz/fm>n){
fz*=i; //分子的阶乘
fm*=2.0*i+1; //第一项不用计算,直接从第二项开始
i+=1.0;
pi+=fz/fm;
}
printf("%.6lf",pi*2.0);
return 0;
}