求一个数的阶乘

为了防止某个数的阶乘太大超过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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值