编写一个java程序jse.java,按下面的公式计算自然对数底e的值(n的值取20): 
e=1/1!+1/2!+1/3!+1/4!+…1/n! 高手速度帮忙下

解决方案 »

  1.   

    public class Test { 
    public static double f(int n) { 
    if(n==1) 
    return 1; 
    return n*f(n-1); 

    public static void main(String[] args) throws Exception { 
    int n = 20; 
    double sum = 0; 
    for(int i=1;i <=n;i++) { 
    sum += 1 / f(n); 

    System.out.println("sum = "+sum); 

    }
      

  2.   


    public class TestJiecheng { public Long jieCheng(int n){
    long i = (long)1;
    if(n==1){
    return i;
    }else{
    return n*jieCheng(n-1);
    }
    }
    public static void main(String[] args) {
    TestJiecheng tj = new TestJiecheng();

    double sum = 0;

    for(int i = 1;i<=20;i++){

    double a = 0;
    double c = (double)tj.jieCheng(i);
    a = 1/c;
    sum = sum + a;
    }

    System.out.println(sum); }}好像和上面差不多~
      

  3.   


    下面为程序:不过你的公式有问题,e=1+1/1!+1/2!+1/3!+1/4!+…1/n! ;开始我按你的错误公式来算,结果总不对.public class CalculateE {    public static void main(String[] args) {
            //在此我们假设N=10000,理论上n可以取无限大,在此为了速度,故取10000.
            long N = 10000;
            BigDecimal result = new BigDecimal("1");
            BigInteger cal = new BigInteger("1");//分母
            BigDecimal fenZi = new BigDecimal("1");//分子        for (long i = 1; i <= N; i++) {
                //将大整数转为大数字
                BigDecimal dCal=new BigDecimal(cal);
                result = result.add(fenZi.divide(dCal,20,BigDecimal.ROUND_HALF_UP));
                 //计算N!的阶乘
                cal = cal.multiply(
                        new BigInteger(Long.valueOf(i + 1).toString()));
            }
            System.out.println(result.doubleValue());
        }
    }