我写的代码能算到1000!,可再大点程序就挂了,初学者希望大家帮忙解答!!!
import java.math.BigInteger;
import java.util.*;
 class text {
public static void main(String []args)
{
Scanner reader=new Scanner(System.in);
int a=reader.nextInt();
BigInteger i=new BigInteger(a+"");
BigInteger sum=new BigInteger(a+"");
BigInteger l=new BigInteger(1+"");
while(!i.equals(l))
{
i=i.subtract(l);
sum=sum.multiply(i);
}
System.out.println(sum);



}}

解决方案 »

  1.   

    BigInteger也是有范围的,超出这个范围本事再高也没法计算下去,一万的阶乘数字已经很大了
      

  2.   

    那是否能用BigInteger算一万的阶乘呢?
      

  3.   

    不必用到数据结构。
    import java.math.BigInteger;
    class test {
    public static void main(String []args)
    {
    BigInteger a=new BigInteger(10000+"");//此处可修改阶乘最大数
    BigInteger sum=new BigInteger(a+"");
    BigInteger m=new BigInteger(1+"");
    while(!a.equals(m))
    {
    sum=sum.multiply(m); 
    m=m.add(new BigInteger(1+""));
    }
    System.out.println(sum);
    }
    }
      

  4.   

    JDK1.6
    位操作对其操作数的二进制补码表示形式的单个位进行操作。如有必要,操作数会通过扩展符号来包含指定的位。单一位操作不能产生与正在被操作的 BigInteger 符号不同的 BigInteger,因为它们仅仅影响单个位,并且此类提供的“无穷大词大小”抽象可保证在每个 BigInteger 前存在无穷多的“虚拟符号位”数。 public static void main(String[] args) {
    long sum=1;
    int i=10;
    do{
    sum=sum*i;
    i--;
    }while(i!=1);
    System.out.println(sum);
    BigInteger bi=new BigInteger("1");
    int max=1349;
    do{
    bi=bi.multiply(new BigInteger(new Integer(max).toString()));
    max--;
    }while(max!=1);
    System.out.println(bi);
    }比你好  1349以后就不输出了
    是不是和内存有关呀?
    理论上应该是可以的