200的阶乘,全网最全,欢迎指正。

求阶乘,一定会想到循环和递归,但是结果大了之后就要考虑数据类型,int或long存不下最后阶乘的结果。
版本1循环

private static int factorial(int n) {
		if (n <0) return -1;
		int result=1;		
		for(int i=1;i<=n;i++) {
			result*=i;
		}
		return result;
	}

这种循环适合比较小的阶乘。
版本2递归

public static int factorial1(int n) {
		if (n <0) {
			return -1;
		}else if (n <= 1) {
            return 1;
		}else {
            return n * factorial1(n - 1);
		}
    }

版本3循环

private static BigInteger factorial3(int n) {
		BigInteger result=new BigInteger("1");	
		if (n <0) {
			return BigInteger.valueOf(-1);
		}else {
			for(int i=1;i<=n;i++) {			
				result=result.multiply(new BigInteger(String.valueOf(i)));
			}
			return result;			
		}				
}

BigInteger的定义和普通数据类型不太一样,乘法也不太一样,而且只能BigInteger类型跟BigInteger类型相乘,所以在循环时把i通过构造方法变成BigInteger类型,而构造方法又需要是String类型,所以又把i变成String。
版本4递归

public static BigInteger factorial2(int n) {
		 if (n <0) {
			 return BigInteger.valueOf(-1);
		 }else if(n == 1 || n==0){
			 return BigInteger.valueOf(1);
		 }else{
			 return BigInteger.valueOf(n).multiply(factorial2(n - 1));
		 }			 
}

版本3和版本4可以算200的阶乘。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值