1053: 正弦函数(答题端)
Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 10053 Solved: 4368
Submit Status Web Board
Description
输入x,计算上面公式的前10项和。
Input
输入一个实数x。
Output
输出一个实数,即数列的前10项和,结果保留3位小数。
Sample Input
1
Sample Output
0.841
HINT
Source
思路:
去年遗留的题目,总是错?那会也不清楚卡在哪里了。。。。
for(int j=1; j<=10; j++)
ans=ans+pow(-1,j+1)*pow(x,2*j-1)/jie(2*j-1);
现在换一个思路,分开因式试一下也不对,原来自定义函数应该是 double 型。
Code1:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double jie(double x) {//递归求阶乘
if(x<2.0)
return 1.0;
return jie(x-1)*x;
}
int main() {
double ans,x;
scanf("%lf",&x);
ans=0.0;
for(int j=1; j<=10; j++)
ans=ans+pow(-1,j+1)*pow(x,2*j-1)/(jie(2*j-1)*1.0);
printf("%.3lf\n",ans);
return 0;
}
Code2:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
double jie(double x) {//递归求阶乘
if(x<2.0)
return 1.0;
return jie(x-1)*x;
}
int main() {
double ans,x;
scanf("%lf",&x);
double k=x;
ans=k;//答案
double flag=1.0;//符号位
double Jie=1.0;//阶乘的数字
for(int j=2; j<=10; j++) {
flag=flag*(-1.0);
k=k*x*x;
Jie=Jie+2.0;
ans+=flag*(k/jie(Jie));
// ans=ans+pow(-1,j+1)*pow(x,2*j-1)/(jie(2*j-1)*1.0);
}
printf("%.3lf\n",ans);
return 0;
}