int jiecheng(int i)
{
   int s;
   if(i==0)
      s=0;
   else
      s=i*jiecheng(i-1)
   return s;
}用递归,我只想到这些,你试试!!有什么问题再改

解决方案 »

  1.   

    用一个for循环
    int result;
    for(int i=1;i<=n;i++){
        result = result*i;
    }
      

  2.   

    public class jc
    {
    public static void main(String args[])
    {
    int i;
    int m=1;
    for(i=1;i<=10;i++)
    {
    m=m*i;
    }
    System.out.println("阶乘:"+m+"");
    }
    }
      

  3.   

    改正一个错误
    int jiecheng(int i)
    {
       int s;
       if(i==0)
          s=1;//是1不是0
       else
          s=i*jiecheng(i-1)
       return s;
    }
      

  4.   

    这个例子够简单
    public class Jiecheng
    {
    int sum=1;
        int i;
    public void f(int n)

        {
        for (i=1;i<n;i++)
        sum=sum*i;
        
        System.out.println("i="+i);
    System.out.println("n!="+sum);
        }
        public static void main(String[] args)
        {
    Jiecheng obj=new Jiecheng();
    obj.f(10);
        }
    }
      

  5.   

    共享共享,我看的一个:import java.math.BigInteger;  // Import BigInteger from java.math packageimport java.util.*;  // Import all classes (including ArrayList) from java.utilpublic class Factorial4 {
        
    protected static ArrayList table = new ArrayList(); 
    // create cache
        
    static { 
    // Initialize the first element of the cache with !0 = 1.

    table.add(BigInteger.valueOf(1));
        
    }    
    /** The factorial() method, using BigIntegers cached in a ArrayList */
    public static synchronized BigInteger factorial(int x) {        if (x<0) 
             throw new IllegalArgumentException("x must be non-negative.");        for(int size = table.size(); size <= x; size++) {            BigInteger lastfact = (BigInteger)table.get(size-1);            BigInteger nextfact = lastfact.multiply(BigInteger.valueOf(size));            table.add(nextfact);
           
            }
       
            return (BigInteger) table.get(x);
      
         }
      

  6.   

    int result;
    for(int i=1;i<=n;i++){
        result = result*i;
    }
      

  7.   

    老兄这个问题你不用拿出来问吧
    就是一个FOR循环,数据溢出了就换一个数据类型。
      

  8.   

    我说楼上的各位,既然你们说得这么简单,能不能先做一个看看能不能出来结果好不好!就做10000的阶乘吧!真心希望高手能指点,想用简单的for循环加乘法的这种算法就不要说了!
      

  9.   

    public static void main(String ss[]){
    StringBuffer rs = new StringBuffer("1");
        for (int i = 1; i <= 1000; i++) {
            StringBuffer tmp_rs = new StringBuffer();
            int carry = 0;
            for (int j = 0; j < rs.length(); j++) {
                char subnum = rs.charAt(j);
                int isubnum = Integer.parseInt(String.valueOf(subnum));
                int product = i * isubnum + carry;
                int mantissa = product % 10;
                carry = product / 10;
                tmp_rs.append(mantissa);
            }
            if (carry != 0)
                tmp_rs.append(carry);
            rs = tmp_rs;
        }
        System.out.println(rs.reverse());
    }
    }
      

  10.   

    楼上这位朋友的算法很好,只是有个小小的BUG,使得计算结果有误!
      

  11.   

    不知pxboy(阿土仔) 何以判定 bluesmile979(笑着) 的算法是错的,愿闻其详。
    试了1000的阶乘,数了0,个数没错。
      

  12.   

    卖个关子,过几天再说,呵呵,不能说算法是错的,只是一点小BUG没考虑到
      

  13.   

    和和,卖个关子没人理我if (carry != 0)
         tmp_rs.append(carry);这里错了,carry应该反转