【38】n!中存在的问题

  1. public class TestJC {  
  2.    public static void main(String[] args) {         
  3.       try{  
  4.               int  n = 100;  
  5.               factorial(n);          
  6.       }catch(Exception e){  
  7.           e.printStackTrace();  
  8.       }          
  9. }  
  10.    public  static  void  factorial(int  n){  
  11.        int   result = 1;  
  12.           for(int i = n; i > 0; i--){  
  13.               result = result*i;  
  14.           }  
  15.       System.out.println(result);  
  16.    }  
  17. }  

以上就是递推相乘的代码,但是有一个严重的问题:int型最大表示正数是 2,147,483,647,当输入值为1-12的时候可以顺利计算出值,12!为 479001600,13!就不对了。如何才能写出通用的算出阶乘的方法:通用的算出阶乘的方法要用到Java中的BigInteger。

BigInteger不可变的任意精度的整数。所有操作中,都以二进制补码形式表示 BigInteger(如 Java 的基本整数类型)。BigInteger 提供所有 Java 的基本整数操作符的对应物,并提供 java.lang.Math 的所有相关方法。另外,BigInteger 还提供以下运算:模算术、GCD 计算、质数测试、素数生成、位操作以及一些其他操作。

  1. import java.math.BigInteger;  
  2.   
  3. public class TestJC {  
  4.    public static void main(String[] args) {  
  5.        
  6.       try{           
  7.               int  n = 100;  
  8.               factorial2(n);       
  9.       }catch(Exception e){  
  10.           e.printStackTrace();            
  11.       }          
  12. }   
  13.    public  static  void  factorial2(int  n){  
  14.        BigInteger  result = new  BigInteger("1");  
  15.        for(int i=n ; i > 0 ; i--){  
  16.            BigInteger  temp = new  BigInteger(String.valueOf(i));  
  17.             result = result.multiply(temp);  
  18.        }  
  19.        System.out.println(result);
  20.    }  
  21. }  

利用以上代码 100! =93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值