import java.math.BigInteger;public class demosum{

public static void main(String[] args){

BigInteger result = new BigInteger("1");
BigInteger bi = new BigInteger("1");

for(int i=1;i<=100;i++){
bi = getResult(new BigInteger(""+i));
result.add(bi);
System.out.println (result);
}
}

public static BigInteger getResult(BigInteger i){
if(i.equals("1")){
return new BigInteger("1");
}
return i.multiply(getResult(i.divide(new BigInteger("1"))));

}
}
它出现了死循环.

解决方案 »

  1.   

    if(i.equals("1"))这个条件不会满足,一个是BigInteger ,一个字符串
    不要用递归,用循环好了
      

  2.   

    1.1楼说的没错"if(i.equals("1")) 这个条件不会满足,一个是BigInteger ,一个字符串 "
    2. i.multiply(getResult(i.divide(new BigInteger("1")))); 
    3.直接循环不就好了吗
      

  3.   

    把这个 if(i.equals("1")) 改了 if(i.equals(1))也不对
    自己随便写了个,数字太大时有错
    望各位大虾们指教一二
    public static void main(String[] args) {
    long result = 0;
    long tmp = 1;
    int i;
    for(i = 1; i <= 100; i++) {
    tmp *= getMul(i);
    result += tmp;
    System.out.println(i+"的阶乘:"+tmp);
    }
    System.out.println("1到"+(i-1)+"的阶乘之和:"+result);
    }

    private static long getMul(int num) {
    return 1 * num;
    }
    改为double倒不会出错
      

  4.   

    import java.math.BigInteger;public class BigIntTest {    public static void main(String[] args) {
         BigInteger t = BigInteger.ONE;
         BigInteger r = BigInteger.ZERO;
            for(int i = 1; i <= 100; i++) {
             t = t.multiply(new BigInteger(String.valueOf(i)));
             r = r.add(t);
            }
            System.out.println(r);
        }
    }
      

  5.   

    阶乘不是乘法吗?
    为什么要用r.add()?
    这道题我以前做过,MS结果比楼上给出的要长。
      

  6.   

    结果直接从Eclipse里copy的,没有验证过,但是用1到5的阶乘和验证过代码
      

  7.   

    -_-!!我错了,刚才算了一下,100!的结果是:93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
    没你的长。
    Sorry!:|
      

  8.   

    我自己改正后的答案是这样的:import java.math.BigInteger; public class demo { 
       
        public static void main(String[] args) { 
         BigInteger r = BigInteger.ZERO; 
            for(int i = 1; i  <= 100; i++) { 
             
             r = r.add(getResult(i)); 
            } 
            System.out.println(r); 
        } 
        
        public static BigInteger getResult(int atr){
        
         BigInteger t = BigInteger.ONE; 
         BigInteger rx = BigInteger.ZERO; 
         for (int i = 1; i<=atr; i++){
         t = t.multiply(new BigInteger(String.valueOf(i))); 
         rx=rx.add(t);
         }
         return rx;
        }
    }
    它的结果是:
    95221410216348484495220122088890777516830189
    30970614840888493645111490125520863186034184
    18617044362540240315555410978265358075712570
    12200675989420962514971614
      

  9.   

    LZ你自己改正后的代码还是有问题,把
    for(int i = 1; i   <= 100; i++) {
    换成
    for(int i = 1; i   <= 3; i++) {
    计算3的阶乘和来验证,得到的输出结果是13,但是1! + 2! + 3! = 1 + (1 x 2) + (1 x 2 x 3) = 1 + 2 + 6 = 9
    这道题如果用递归的话,正确的代码应该是:import java.math.BigInteger;public class BigIntTest2 { public static void main(String[] args) {
    BigInteger r = BigInteger.ZERO;
    for (int i = 1; i <= 100; i++) {
    r = r.add(getResult(i));
    }
    System.out.println(r);
    } public static BigInteger getResult(int atr) { BigInteger t = BigInteger.ONE;
    //BigInteger rx = BigInteger.ZERO;
    for (int i = 1; i <= atr; i++) {
    t = t.multiply(new BigInteger(String.valueOf(i)));
    //rx = rx.add(t); //t里面已经是atr的阶乘了,如果再加一遍,getResult的返回值就直接是阶乘和了,这一行应该去掉
    }
    return t;
    }
    }执行结果还是:
    942690016837099792608598341244735398720707226139826724 
    429383593056246782234795060234002940935991364669866091 
    24347432647622826870038220556442336528920420940313
      

  10.   

    昨天没仔细看,上面的版本不是用递归的,用递归实现的代码如下:import java.math.BigInteger;public class BigIntTest3 { public static void main(String[] args) {
    BigInteger r = BigInteger.ZERO;
    for (int i = 1; i <= 100; i++) {
    r = r.add(getResult(i));
    }
    System.out.println(r);
    } public static BigInteger getResult(int atr) {
    if (atr == 1) {
    return new BigInteger("1");
    } else {
    return new BigInteger(String.valueOf(atr)).multiply(getResult(atr -  1));
    }
    }
    }执行结果同上
      

  11.   

    package demo;
    import java.math.BigInteger;public class Demosun {
    public static void main(String[] args) { BigInteger bigNum = new BigInteger("100");
    System.out.print(factorial(bigNum));
    }

    public static  BigInteger factorial(BigInteger n)
    {
    if(n.equals(BigInteger.ONE))
    return BigInteger.ONE;
    else
    return n.multiply(factorial(n.subtract(BigInteger.ONE)));
    }
    }
    正确运行:记得给分啊
    运行结果:
    9332621544394415268169923885626670049071596826438
    1621468592963895217599993229915608941463976156518
    286253697920827223758251185210916864000000000000000000000000
      

  12.   

    xiexie777,你的程序只算了阶乘,LZ的题目是计算阶乘和,不一样的。看仔细了再发言,比较不容易说错话
      

  13.   

    谢谢worm_oz指出错误!重新调试如下:package demo;import java.math.BigInteger;public class Demosun {
    public static void main(String[] args) { BigInteger result = BigInteger.ZERO;

    for(int i = 1;i<=100;i++)
    {
    String tempNum = i+"";
    result = result.add(factorial(new BigInteger(tempNum)));

    }

    System.out.println(result);
    }

    public static  BigInteger factorial(BigInteger n)
    {
    if(n.equals(BigInteger.ONE))
    return BigInteger.ONE;
    else
    return n.multiply(factorial(n.subtract(BigInteger.ONE)));
    }


    运行结果:942690016837099792608598341244735398720707226139
    826724429383593056246782234795060234002940935991364669866
    09124347432647622826870038220556442336528920420940313