用泰勒展开式求sinx近似值的多项式为:
。
输入x求sinx的近似值,要求误差不大于0.00001。
输入格式:
直接输入一个实型数据。没有其它任何附加字符。
输出格式:
直接输出保留3位小数的实型结果。
输入样例:
2.5
输出样例:
0.598
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
源码:
#include<stdio.h>
#include<math.h>
long long fact(int i);
int main()
{
double num;
double sum=0;
int flag=1;
int mother=1;
int son=1;
double y=1;
scanf("%lf",&num);
while(1)
{
y=pow(num,son)*1.0/fact(mother)*1.0*flag;
sum=sum+y;
flag=-flag;
mother=mother+2;
son=son+2;
if(fabs(y)<=0.00001)
break;
}
printf("%.3f",sum);
return 0;
}
long long fact(int i)
{
long long sum = 1;
for (int j = 1; j <= i; j++)
{
sum = sum * j;
}
return sum;
}
这条基本上没有什么难度,但是有坑的地方:如果用while循环写的话很容易超时。如果用while循环,自定义求阶乘的函数必须用long long作为返回值,不然最后输出的就是“-nan”,也就是not a number。