code 1(未完全通过)
#include<stdio.h>
int main(){
unsigned long long i,a=1,b=1;
int c,cnt=0;
double sum=0,n;
scanf("%lf",&n);
for(i=1;1.0*a/b>=n;i++){
a*=i;
b*=(2*i+1);
sum+=1.0*a/b;
}
printf("%.6f\n",2.0*(1+sum));
return 0;
}
code 1不能通过的原因在于分子,分母单独迭代,几次之后就过大,超出整形变量的范围。哪怕加了约分,也不行。
code 2(检验通过)
#include<stdio.h>
int cc(int a,int b);
int main(){
int i;
double sum,f,n;
sum=f=1.0;
scanf("%lf",&n);
for(i=1;f>=n;i++){
f=f*i/(2*i+1);
sum+=f;
}
printf("%.6f\n",2.0*sum);
return 0;
}
code2 不单独求分子分母,每一项在前一项的基础上求出,没有超出范围的问题。