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