Java实现阶乘的计算(四种方法)

用Java实现阶乘的计算

Java入门练习

废话不多说,直接上代码。

import java.math.BigInteger;
import java.util.ArrayList;

public class doFactorial {

	public static void main(String[] args) {
  		int number=5;
  		System.out.println("方法一算得"+number+"的阶乘为:"+Wayone(number));
  		System.out.println("方法二算得"+number+"的阶乘为:"+Waytwo(number));
  		System.out.println("方法三算得"+number+"的阶乘为:"+Waythree(number));
  		System.out.println("方法四算得"+number+"的阶乘为:"+Wayfour(number));//方法四可以传入一个较大得number值
 	}

	/**
  	* 普通的循环方法求阶乘
  	* @param num
  	* @return
  	*/
 	public static int Wayone(int num) {
  		int sum=1;
  		if(num<0) {
   			throw new IllegalArgumentException("需要计算的参数必须为正数!");//抛出不合理参数异常
 		 }
  		for(int i=1;i<=num;i++) {
  			 sum*=i;
  		}
  		return sum;
 	} 

	/**
 	* 运用递归算法求阶乘
  	* @param num
  	* @return
 	*/
 	public static int Waytwo(int num) {
  		int sum=1;
  		if(num<0) {
   			throw new IllegalArgumentException("需要计算的参数必须为正数!");//抛出不合理参数异常
  		}
  		if(num==1) {
   			return 1;//跳出循环
  		}else {
   			sum=num*Waytwo(num-1);//递归
   			return sum;
  		}
 	}

	/**
  	* 数组添加计算阶乘
  	* @param num
  	* @return
  	*/
 	public static long Waythree(int num) {
  		long []arr=new long[21];
  		arr[0]=1;
  		int last=0;
  		if(num>=arr.length) {
   			throw new IllegalArgumentException("传入的值太大了!");//抛出不合理参数异常
  		}
  		if(num<0) {
  			throw new IllegalArgumentException("需要计算的参数必须为正数!");//抛出不合理参数异常
 		}
 		while(last<num) {
   			arr[last+1]=arr[last]*(last+1);
   			last++;
  		}
  		return arr[num];
 	}

	/**
  	* 用BigInteger类计算阶乘
  	* @param num
  	* @return
  	*/
 	public static synchronized BigInteger Wayfour(int num) {
  		ArrayList list=new ArrayList();
  		list.add(BigInteger.valueOf(1));
  		for(int i=list.size();i<=num;i++) {
   			BigInteger lastfact=(BigInteger) list.get(i-1);
   			BigInteger nextfact=lastfact.multiply(BigInteger.valueOf(i));
   			list.add(nextfact);
  		}
  		return (BigInteger) list.get(num);
 	}
}

如果有什么意见与建议,欢迎大家评论留言。

我是一名Java初学者,推荐大家一本学习资料,看了以后收获挺大的
链接:https://pan.baidu.com/s/1xYtkXyDqWJVM34vkjtIKHw
提取码:l1mv

  • 28
    点赞
  • 98
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值