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