最开始的代码,但是一直都错
#include <stdio.h>
double getJc(double a);
int getFm(int a);
int main(){
double threshold;
scanf("%lf",&threshold);
double pi=0;
double i=0;
double a = getJc(i)*1.0/getFm((int)i);
while(a>=threshold){
pi += a;
i++;
a = getJc(i)*1.0/getFm((int)i);
}
printf("%.6f",pi*2);
}
double getJc(double a){
double i;
double count=0;
if(a==0){
return 1;
}
for(i=1;i<=a;i=i+1){
count *= i;
}
return count;
}
int getFm(int a){
int i,count=0;
for(i=0;i<=a;i++){
count *= 2*a+1;
}
return count;
}
看了大佬们的代码后,就像这种 不要单独去写一个球阶乘一个球分母的函数了,很有可能数字大了阶乘超过long int 的范围了 ,但是double的范围很大,用double,而且double类型最好这样写!!! 不要去建一个double类型的函数来求阶乘!
#include<stdio.h>
int main()
{
double i,j,k;
double sum=1;
double n;
scanf("%lf",&n);
i=2;j=3;
double i1=1;
double j1=1;
while(i1/j1>=n)
{
if(j1==1)
i1=1;
else
{
i1=i1*i;//1*2; 1*2*3;
i=i+1;
}
//1*2; 1*2*3;
j1=j1*j;
j=j+2;
sum=sum+i1/j1;
//printf("%f",sum);
}
printf("%.6f",sum*2);
return 0;
}