问题描述】
已知cosx的近似计算公式如下:
cosx = 1 - x2/2! + x4/4! - x6/6! + … + (-1)nx2n/(2n)!
其中x为弧度,n为大于等于0的整数。编写程序根据用户输入的x和n的值,利用上述近似计算公式计算cosx的近似值,要求输出结果小数点后保留8位。
【输入形式】
从控制台输入小数x(0<=x<=10)和整数n(0<=n<=1000),两数中间用空格分隔。
【输出形式】
控制台输出公式结果:小数点后保留8位。
【样例输入1】
1.0472 3
【样例输出1】
0.49996244
【样例输入2】
1.0472 49
【样例输出2】
0.49999788
【样例说明】
输入x为1.0472,n为3,求得cosx近似计算公式的值为0.49996244,小数点后保留8位;同样,输入x为1.0472,n为49,求得cosx近似计算公式的值为0.49999788,小数点后保留8位。
注意:为保证数据的准确性和一致性,请使用double数据类型保存计算结果。
【评分标准】
该题要求输出上述公式的计算结果,共有5个测试点,每个测试点5分,共25分。
import java.util.Scanner;
public class _3cosx {
public static void main(String[] args) {
double x;
int n;
Scanner sc = new Scanner(System.in);
x = sc.nextDouble();
n = sc.nextInt();
double cosx=0;
double former=1;//为公式中每一项的绝对值
for(int i = 0;i<=n;)
{
cosx += former*Math.pow(-1, i);//一加一减
++i;//防止在循环的第一次,i=0,下一行除0
//下一项是在上一项的基础上,乘x,再乘x,除以2*i,再除以2*i-1
former = former*x*x/(2*i)/(2*i-1);
}
System.out.printf("%.8f\n",cosx);
}
}
没单独写求阶乘的函数,因为公式中每一项可以通过上一项乘除得到,所以保存一下每一项,就可以求得下一项。