根据下面关系式,求圆周率的值,直到最后一项的值小于给定阈值。
2π=1+31+3×52!+3×5×73!+⋯+3×5×7×⋯×(2n+1)n!+⋯
输入格式:
输入在一行中给出小于1的阈值。
输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
输入样例:
0.01
输出样例:
3.132157
本来想着用函数来实现n!/(3*5*7...(2*n+1))的,但是最后输出的结果误差比较大,从第三位小数开始就有了问题,不明白是为什么????(码不小心搞丢了。。。)
那就用循环吧,把函数转化成循环后,代码如下:
#include <stdio.h>
int main()
{
double y,sum=1.0;
scanf("%lf",&y);
int i=1;
double j=1.0;
while(j>=y)
{
j=j*i/(2*i+1);//写成j*=1.0*i/(2*i+1);是不对的,不明白原理
sum+=j;
i++;
}
printf("%.6f",2*sum);
}
莫名其妙的就对了
在以后一年一度的大复盘中再看吧,目前还解决不了