题目描述
输入x,计算上面公式的前10项和。
输入
输入一个实数x。
输出
输出一个实数,即数列的前10项和,结果保留3位小数。
样例输入
1
样例输出
0.841
#include<stdio.h>
#include<math.h>
double fun(double n){ //计算阶乘
double k=1,i=1;
while(i<=n){
k=k*i;
i++;
}
return k;
}
int main(){
double x,sum=0,x1,x2;
scanf("%lf",&x);
for(double i=1;i<=10;i++){
x1=pow(x,2*i-1); //分子
x2=fun(2*i-1); //分母
sum=sum+pow(-1,i+1)*(x1/x2);
}
printf("%.3f",sum);
return 0;
}
另外:还看到另一种的写法,源自(https://www.jianshu.com/p/7e3a4f06840c)
#include<stdio.h>
int main()
{
int i;
double x, flag, sum, deno, numerator;
scanf("%lf", &x);
sum = 0.0;
deno = 1.0; //第一项的分母
numerator = x; //第一项的分子
flag = 1.0; //第一项的符号
for(i = 1; i <= 10; i++)
{
sum += numerator * flag / deno;
//为下一项的计算做准备
flag = -flag;
numerator = numerator * x * x;
deno = deno *(2 * i) * ( 2 * i + 1);
}
printf("%.3f\n", sum);
return 0;
}