1-100阶乘 用递归实现

1-100阶乘 用递归实现

public int add(int a){
if(a==0||a==1){
return 1;
}else{
return add(a)*add(a-1)
}
}

就行了

[color=blue]
呵呵,楼上把问题看简单了。

100的阶乘是:9.33262154 × 10 的157次方

必须采用 用 int数组来计算乘的方法。

[b]

基本流程:

1、新建1个数组,最好是个ArrayList,可以动态增长的。

2、先把 n! 放在ArrayList中。(第一次 n ! = 1)

3、然后,用(n+1)去一位一位的乘 N !的ArrayList的每一位。记得如果有进位的话,要保存到临时变量里。然后,在计算下一位时,记得加上进位。

4、把(N+1)!的结果就存在了ArrayList中了。

5、然后,重复3 、4 步,直到 100;

[/b]
[/color]

好像很复杂。。100!的话还行,要是1000!用递归我想计算机会受不了的。。
[code="java"]import java.math.BigDecimal;

public class Test {
public static void main(String args[]){
BigDecimal result= new BigDecimal(1);
for(int i=1;i<=100;i++){
BigDecimal i_value= new BigDecimal(i);
result = result.multiply(i_value);
}
System.out.println("result="+result);
}
}[/code]

这里有个大数据阶乘的求法,,C的,,可以借鉴

[url]http://www.cnblogs.com/confach/archive/2005/07/14/192703.html[/url]

你自己试试呀!呵呵!

1-100阶乘 用递归实现

import java.math.BigInteger;
public class JieCheng {
public static BigInteger calJieCheng(int n) {
if (n < 1)
throw new IllegalArgumentException();
if (n == 1)
return BigInteger.ONE;
return calJieCheng(n - 1).multiply(BigInteger.valueOf(n));
}

public static void main(String[] args) {
    for (int i = 1; i <= 100; i++)
        System.out.println(calJieCheng(i));
}

}

BigInteger可以模拟任意长度的数,这个类的细节可以参考我写的一篇文章
http://robblog.iteye.com/admin/blogs/550429

[code="java"]import java.math.BigInteger;

public class JieCheng {

public static BigInteger calJieCheng(int n) {
    if (n < 1)
        throw new IllegalArgumentException();

    if (n == 1)
        return BigInteger.ONE;

    return calJieCheng(n - 1).multiply(BigInteger.valueOf(n));
}

public static void main(String[] args) {
    for (int i = 1; i <= 100; i++)
        System.out.println(calJieCheng(i));
}

}[/code]

代码格式不好,再贴一遍,可以运行。

100的阶乘计算机计算也会很慢了!~~

很明显,如此大的数,还是用BigInteger实现啊 :lol:
public class digui {
int i=0;
BigInteger calculate(BigInteger n)
{
BigInteger a;
if(n.equals(BigInteger.ONE))
return BigInteger.ONE;
else
return n.multiply(calculate(n.subtract(BigInteger.ONE)));
}
public static void main(String[] args)
{
BigInteger n=new BigInteger(Integer.toString(100));
digui d=new digui();
System.out.println("the result is "+d.calculate(n).toString());
}
}
结果:
the result is 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000