用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