帮忙算一下sum=1/1!+1/2!+1/3!+...+1/n!

解决方案 »

  1.   

    public static void main(String[] args)
    {
    int n=300;
    System.out.println(do1(n));
    } public static double do1(int n)//计算1/n!+....
    {
    if(n<=1)
    return 1;
    else
    {
    return 1/(doInt(n))+do1(n-1);
    }
    } public static double doInt(int n)//计算n!
    {
    if(n<=1)
    return 1;
    else if(n==2)
    return 2;
    else 
    {
    return n*doInt(n-1);
    }
    }
      

  2.   

    可能你要把double或int换成bigInteger和BigDecimal来进行相关的乘除操作。不然当数据操过一定的量时,系统是不能计算的。。
      

  3.   

    /*
    *一楼是用递归实现的 这里不用递归 
    *计算的值为300我们只需要在命令提示符空窗口中输入
    *java Ma 300
    *
    */
    public class Ma{
    public static void main(String[] args){
    //这里最好加入判断args[0]是不是数字组合
    int b=Integer.parseInt(args[0]);
    Ma a=new Ma();System.out.println(a.dol(b));
    }private int doInt(int i){//计算阶乘
    int doint=1;
    for(int j=0;j<i;++j){
    doint *=j;
    }
    return doint;
    }
    public int dol(int i){
    int dol=0;
    for(int j=0;j<i;++j){
    dol += j/doInt(j);
    }
    return dol;}}
      

  4.   

    对不起,刚才的回复有一点问题,因为dol返回的值为 double 而且我把算式也看错了
    如正如下
    public double dol(int i){
    double dol=0;
    for(int j=0;j<i;++j){
    dol += 1/doInt(j);
    }
    return dol;}
      

  5.   

    import java.util.Scanner;
    import java.math.*;
    public class Sum
    {
    public static void main(String args[])
    {
    Scanner sc = new Scanner(System.in);
    BigDecimal n = sc.nextBigDecimal();
    System.out.println(sum(n));
    }
    /**
     * 计算1/n!
     * @param n
     * @return
     */
    public static BigDecimal oneDivN(BigDecimal n)
    {
    BigDecimal bd = new BigDecimal(1);
    BigDecimal i = new BigDecimal(1);
    //db.add(...)以后,db的值不会改变,所以要重新new一个对象
    for(;i.compareTo(n)!=1;i=new BigDecimal(i.add(new BigDecimal(1)).toString()))
    {
    bd = new BigDecimal(bd.multiply(i).toString());
    }
    return new BigDecimal(1).divide(bd,100,BigDecimal.ROUND_HALF_UP);
    }
    /**
     * 从头加到尾
     * @param n
     * @return
     */
    public static BigDecimal sum(BigDecimal n)
    {
    BigDecimal sum = new BigDecimal(0);
    BigDecimal i = new BigDecimal(1);
    for(;i.compareTo(n)!=1;i=new BigDecimal(i.add(new BigDecimal(1)).toString()))
    {
    sum = new BigDecimal(sum.add(oneDivN(i)).toString());
    }
    return sum;
    }
    }
      

  6.   

    public class Factorial {
    public static void main(String[] args) {

    //sum=1/1!+1/2!+1/3!+...+1/n!

    System.out.println(caculate(5));

    }

    private static double caculate(int n) {
    double sum = 0.0;
    for(int i = 1; i<=n; i++) {
    double temp = 1.0;
    for(int j = 1; j<=i; j++) {
    temp = temp*1/j;
    }
    sum += temp;
    }

    return sum;
    }
      

  7.   

    public class Test {    public static void main(String...args) {
            System.out.println(factorialReciprocalSum(10));
        }    private static double factorialReciprocalSum(int n) {
            double sum = 0;
            double factorial = 1;
            for(int i = 1; i <= n; i++) {
                factorial *= i;
                sum += 1 / factorial;
            }
            return sum;
        }
    }
      

  8.   

    这样的话,计算结果也是一样的:    private static double factorialReciprocalSum(int n) {
            double sum = 0;
            double factorial = 1;
            for(int i = 1; i <= n; i++) {
                factorial /= i;
                sum += factorial;
            }
            return sum;
        }
      

  9.   


    import java.util.Scanner;
    class  Test
    {
    public static void main(String[] args) 
    {
    double sum=0;
    double p=1;
    double num=0;
    Scanner scanner=new Scanner(System.in);
    System.out.println("请输入您要计算的数字:");
    int n=scanner.nextInt();
           
    for (double i=1;i<=n ;i++ )
    {
    p*=i;
    //计算阶乘;
    sum+=p;
    //计算阶乘的和
    num+=1/p;
    //计算1/1!+......+1/n!
     System.out.println("1到n的阶乘分别为:"+p);
    }
           
                    System.out.println("1到n的阶乘的和为:"+sum);
    System.out.println("1/1!+1/2!+......+1/n!="+num);
    }
    }
      

  10.   

    //sum=1/1!+1/2!+1/3!+...+1/n!
    public class EE { public static void main(String[] args)
    {
    float  sum, i, j, t, n;
    n = 10;            //
    for(sum = 0, i = 1; i <= n; ++i)
    {
    for(j = 1, t = 1; j <= i; ++j)
    {
    t *=j; 
    }
    sum += 1/t;
    }
    System.out.println("sum = " + sum);
    }
    }