#include
double fact(int n);
int main(){
int i,y;
double eps,sum,t;
y=1;
sum=1;
scanf("%le",&eps);
if(1
printf("PI = 2.00000");
}
else{
t=0;
for(i=1;t>eps;i++){
y=y*(2i+1.0);
t=fact(i)/y;
sum=sum+t;
}
printf("PI = %.5lf",2sum);
}
return 0;
}
double fact(int n){
int i;
double result;
if(n<0){
return 0;
}
result=1;
for(i=1;i<=n;i++){
result=result*i;
}
return result;
}
应该是因为if的原因,if可以去掉,把for循环那里改一下,及一些相关变量修改下,阶乘可以直接用乘以每个i即可,修改如下:
参考链接:
【PTA】近似求PI_-believe-的博客-CSDN博客_pta近似求pi
#include<stdio.h>
double fact(int n);
int main(){
int i;
double eps,sum=1,t,y=1;
y=1;
sum=1;
scanf("%le",&eps);
// t=0;
//https://blog.csdn.net/jiangxiaoshan123/article/details/81637490
for(i=1;y>eps;i++){
y=y*i/(2*i+1);
//t=fact(i)/y;
sum=sum+y;
}
printf("PI = %.5lf",2*sum);
return 0;
}
double fact(int n){
int i;
double result;
if(n<0){
return 0;
}
result=1;
for(i=1;i<=n;i++){
result=result*i;
}
return result;
}