上次求数的阶乘使用了double类型,运算速度很慢,此次改进为采用BigInteger类对数据封装
double型数据的算法地址:
http://blog.csdn.net/lengxue_1014/archive/2009/11/03/4761326.aspx
//Recursion.java
//求N的阶乘的算法,采用BigInteger类对数据包装,加快了运算速度,且对数据的容纳比double
//高。
//@Date:2010-1-3 V2.0
//@Author:莫笑书生
import java.util.*;
import java.math.BigInteger;
public class Recursion
{
public static void main(String[] args){
int i=Recursion.getBase();
if (i>=0)
{
BigInteger b=getResult(BigInteger.valueOf(getBase()));
System.out.println("N!="+b);
}else{
System.out.println("自然数N必须大于等于零");
}
}
/*求阶乘
*@return BigInteger
*/
public static BigInteger getResult(BigInteger n){
if (n.equals(BigInteger.valueOf(1L))||n.equals(BigInteger.valueOf(0L)))
{
//如果n等于1,则返回1
return BigInteger.valueOf(1L);
}
//getResult(n-1)*n
return getResult(n.subtract(BigInteger.valueOf(1L))).multiply(n);
}
/*获取数N,以便求N的阶乘
*@return int
*/
public static int getBase(){
Scanner input=new Scanner(System.in);
System.out.println("请输入一个大于等于零的数N:");
int n=input.nextInt();
return n;
}
}