学到翁恺老师《C语言程序设计》第八周了,来PTA做点习题练习
题目是:
用圆周率的关系式,求圆周率的值,直到最后一项的值小于给定阈值。
2π=1+31+3×52!+3×5×73!+⋯+3×5×7×⋯×(2n+1)n!+⋯
输入格式:
输入在一行中给出小于1的阈值。
输出格式:
在一行中输出满足阈值条件的近似圆周率,输出到小数点后6位。
一开始写出来的代码是这样的:(c语言)
#include "stdio.h"
int main(){
double e;
int i=1;
double temp=0;
double x=1;
double y=1;
double sum=1;
double pai=0;
scanf("%lf",e);
while(e<1.0){
for(i=1;temp<e;i++){
x*=i;
y*=(2*i+1);
temp=x/y;
sum+=temp;
}
}
pai=2*sum;
printf("%.6f",pai);
return 0;
}
emmmm但是写出来代码超时,怎么修改呢?
考虑到每次while都要走一次循环,时间复杂度较高,就删去了,果然运行没有超时。
#include "stdio.h"
int main(){
double x=1, y=1,sum=1,pai=0,i;
double e=0;
scanf("%lf",&e);
for(i=1;x/y>=e;i++){
x*=i;
y=y*(2*i+1);
sum+=x/y;
}
pai=2*sum;
printf("%.6f\n",pai);
return 0;
}
gcc一直提示“‘%lf’ expects argument of type ‘double *’, but argument 2 has type ‘double’”,结果发现原来是scanf("%lf",&e)忘记加&符号了。
运行通过~