求1/1!-1/3!+1/5!-1/7!+…+(-1)^(n+1)/(2*n-1)!
法一:
#include"stdio.h"
int main()
{
int n,k;
float t,s=1.0;//用于累加记录最终值,t用于计算n的阶乘
scanf("%d",&n);
for(int i=2;i<=n;i++)
{
t=1;
for(int j=2;j<=2*n-1;j++)//计算n的阶乘
t=t*j;
if(i%2) k=1;//k=(-1)^(n+1)
else k=-1;
t=t*k;
s=s+1.0/t;
}
printf("%f\n",s);
return 0;
}
法二(改进算法):
#include"stdio.h"
int main()
{
int n,k=1;
float t=1,s=1.0;//用于累加记录最终值,t用于计算n的阶乘
scanf("%d",&n);
for(int i=2;i<=n;i++)
{
k=-1*k;
t=t*(2*i-2)*(2*i-1);//t用于累乘
t=t*k;
s=s+1.0/t;
}
printf("%f\n",s);
return 0;
}