高手们帮我看看这个问题出在哪里?我要实现的是计算!100,或者谁还有更好的方法?String sum = "1";
    for(int i=1;i<=100;i++)
    {
      sum=Integer.toString(Integer.parseInt(sum)*i);
    }

解决方案 »

  1.   

    这样写是不是更直接一些, 原来的字符操作会使程序变的慢些:double sum = 1;//用整数而不用字符
            for(int i=1;i<=3;i++) {
                sum= sum*i;
            }
            System.out.println(sum);
            }-----------------------------------------------------------------
    lz代码的问题在于interger的最大值是2147483647(Integer.MAX_VALUE)
    而!100 是9.33262154439441E157, 这个数远远超过2147483647, 所以出错
      

  2.   

    代码修改后为:
     String sum = "1";
    for(int i=1;i<=100;i++)
    {
    sum=Double.toString(Double.parseDouble(sum)*i);
    }
            System.out.println(sum);
            System.out.println(Integer.MAX_VALUE);
      

  3.   

    一楼正确。int 计算只能够计算到 64!,要计算 100! 只能使用更大的。long 最大值也只有2^63-1,同样不够用,double 是最方便的,最大值能达到 1.8E308 左右。
      

  4.   

    计算阶乘要考虑结果的大小,可以到网上查找,有很多
    或者BigInteger类。
      

  5.   

    一楼正确。int 计算只能够计算到 64!,要计算 100! 只能使用更大的。long 最大值也只有2^63-1,同样不够用,double 是最方便的,最大值能达到 1.8E308 左右。
    ---------------------------------------------------------------------------
    double类型的精度够吗?
    100!是一个整数啊,从个位到最高位都应该能够精确表示的。
      

  6.   

    这样补知道行不行.
    import java.math.BigInteger;public class X100 { public static void main(String[] args)
    {
    BigInteger x = new BigInteger("1");
    BigInteger m = new BigInteger("1");
    for(int i=1;i<100;i++){
    BigInteger k = new BigInteger("1");
    x=x.multiply(m);
    m=m.add(k);
    System.out.println(x);

    }

    }
    }结果挺大的.
    933262154439441526816992388562667004907159682643816214685929638952175999932299156089414639761565182862536979208272237582511852109168640000000000000000000000
      

  7.   

    少算了一次,应该 
    for(int i=1;i<101;i++){
    ...
    }