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