最近开始为CCF做准备,所以打算把看的题都写下来,肯定都是站在巨人的肩膀上,如有重复和不足,请大家多多指教。谢谢!
算法题目很简单:exp(x)=1+x+ 2!/ x2 + 3!/x3 +……+ i!/xi (|i!/xi|≤10^-10) 保留四位小数
分析:用s代表和,i代表当前x的幂次,t代表当前当前项
1、初始值 s=1 i=0 t=1
2、循环结束的条件 Math.abs(t) > Math.pow(10,-10) (Java语言中的Math函数,这个也是临时查的)
3、循环规律 t(i)=x^i/i!=x^(i-1)/(i-1)! * (x/i) = t(i-1) * (x/i) 所以 i = i+1; t = t * x/i ; s = s + t; (表达式看着很蛋疼,用笔在纸上写出了会比较好)
4、对于编程语言来说,整数5/2=2,所以在做除法的时候要注意,不然最后是没有小数部分的,我的处理方法是直接用double类型的变量来保存数据,但是对于结果对不对,我确实没法验证,若有大神指点,感激不尽!
5、最后是小数的保留,格式很多的,一查就有了!
源代码如下:
import java.text.DecimalFormat;
import java.util.Scanner;
public class Main2{
static int i=0;//初始值
static double s=1.0;
static double t=1.0;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
double x = in.nextDouble();
i = i+1;
t = t*(x/i);
s = s+t;
while(Math.abs(t) > Math.pow(10, -10)){
i = i+1;
t = t*(x/i);
s = s+t;
}
DecimalFormat df =new java.text.DecimalFormat("#.0000");
System.out.println(df.format(s));
}
}