- public class TestJC {
- public static void main(String[] args) {
- try{
- int n = 100;
- factorial(n);
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- public static void factorial(int n){
- int result = 1;
- for(int i = n; i > 0; i--){
- result = result*i;
- }
- System.out.println(result);
- }
- }
以上就是递推相乘的代码,但是有一个严重的问题:int型最大表示正数是 2,147,483,647,当输入值为1-12的时候可以顺利计算出值,12!为 479001600,13!就不对了。如何才能写出通用的算出阶乘的方法:通用的算出阶乘的方法要用到Java中的BigInteger。
BigInteger不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。
- import java.math.BigInteger;
- public class TestJC {
- public static void main(String[] args) {
- try{
- int n = 100;
- factorial2(n);
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- public static void factorial2(int n){
- BigInteger result = new BigInteger("1");
- for(int i=n ; i > 0 ; i--){
- BigInteger temp = new BigInteger(String.valueOf(i));
- result = result.multiply(temp);
- }
- System.out.println(result);
- }
- }
利用以上代码 100! =93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000