求一个数的阶乘

为了防止某个数的阶乘太大超过Long的取值范围,采用了BigInteger类型的数据

import java.math.BigInteger;


public class factorial {


	public static void main(String[] args) {
		int n1 =17;
		int n2 =18;
		int n3 =56;
		System.out.println(n1+"的BigInteger阶乘为"+bigfactorial(n1));
		System.out.println(n1+"的Long阶乘为"+longfactorial(n1));
		System.out.println(n2+"的BigInteger阶乘为"+bigfactorial(n2));
		System.out.println(n2+"的Long阶乘为"+longfactorial(n2));
		System.out.println(n3+"的BigInteger阶乘为"+bigfactorial(n3));
		System.out.println(n3+"的Long阶乘为"+longfactorial(n3));
	}
	public static BigInteger bigfactorial(int n){
		
		BigInteger result = new BigInteger("1");
		if(n<0){
			System.err.println("请输入不小于0的整数");
			return new BigInteger("-1");
		}
		else if(n==0){
			return new BigInteger("0");
		}
		else {
			for(;n>0;n--){
				result = result.multiply(new BigInteger(n+""));
			}
		}
		return result;
	}
	public static Long longfactorial(int n){
		Long result = Long.parseLong("1");
		if(n<0){
			System.err.println("请输入不小于0的整数");
			return Long.parseLong("-1");
		}
		else if(n==0){
			return Long.parseLong("0");
		}
		else{
			for(;n>0;n--){
				result = result*(n);
			}
		}
		return result;
	}

}


测试结果:17的BigInteger阶乘为355687428096000
17的Long阶乘为355687428096000
18的BigInteger阶乘为6402373705728000
18的Long阶乘为6402373705728000
56的BigInteger阶乘为710998587804863451854045647463724949736497978881168458687447040000000000000
56的Long阶乘为6908521828386340864

你可能感兴趣的:(求一个数的阶乘)