package
com.zf.s2;
//創建一個包
import
java.math.BigInteger;
//導入類
import
java.util.ArrayList;
import
java.util.List;
public
class
TextFactorial {
//操作計算階乘的類
public
static
int
simpleCircle(
int
num){
//簡單的循環計算的階乘
int
sum=
1
;
if
(num<
0
){
//判斷傳入數是否為負數
throw
new
IllegalArgumentException(
"必須為正整數!"
);
//拋出不合理參數異常
}
for
(
int
i=
1
;i<=num;i++){
//循環num
sum *= i;
//每循環一次進行乘法運算
}
return
sum;
//返回階乘的值
}
public
static
int
recursion(
int
num){
//利用遞歸計算階乘
int
sum=
1
;
if
(num <
0
)
throw
new
IllegalArgumentException(
"必須為正整數!"
);
//拋出不合理參數異常
if
(num==
1
){
return
1
;
//根據條件,跳出循環
}
else
{
sum=num * recursion(num-
1
);
//運用遞歸計算
return
sum;
}
}
public
static
long
addArray(
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){
//建立滿足小於傳入數的while循環
arr[last+
1
]=arr[last]*(last+
1
);
//進行運算
last++;
//last先進行運算,再將last的值加1
}
return
arr[num];
}
public
static
synchronized
BigInteger bigNumber(
int
num){
//利用BigInteger類計算階乘
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);
//返回數組中的下標為num的值
}
public
static
void
main(String []args){
//java程序的主入口處
int
num=
5
;
int
num1=
23
;
System.out.println(
"簡單的循環計算"
+num+
"的階乘為"
//調用simpleCircle
+simpleCircle(num));
System.out.println(
"利用遞歸計算"
+num+
"的階乘為"
//調用recursion
+recursion(num));
System.out.println(
"數組添加計算"
+num+
"的階乘為"
//調用addArray
+addArray(num));
System.out.println(
"利用BigInteger類計算"
+num1+
"的階乘為"
//調用bigNumber
+bigNumber(num1));
}
}
|