关于java中的数值计算

记得在csdn的某个帖子中提到计算阶乘的讨论,当时有很多人都提出了自己的算法,每个人都想的很周全。

这两天正好自己看到了相关的文章,那么总结整理一下,以供大家参考,也为了自己的知识总结。

 

在数学中,只有非负整数才有阶乘运算,意思就是说浮点数、负整数都不能进行计算,那么我们在考虑计算时,小于0的数字我们是不考虑计算的。在计算机中,整数的最大取值范围为long型,那么计算阶乘总有会超过计算机数值类型的有效范围。

 

如果我们考虑使用long作为返回类型,那么这是有范围的阶乘运算,代码可以如下:

 

//我的操作系统是32位的XP,可以计算20以内的阶乘

//阶乘计算的数值必须大于等于0,如果小于0不计算

//0的阶乘计算值为1

if ( n < 0 || n > 20 ) { //进行范围检查

        return -1;

} else if ( n == 0 ) {

       return 1;

} else {

      long result = 1;

      for ( ; n > 0 ; n -- ) {

             result *= n;

      }

      return result;

}

 

那么如果计算大的数值阶乘时,怎么算呢?

java中提供了相应的处理办法,采用BigInteger来计算,代码如下

 

if ( n < 0 ) {

      return new BigInteger("-1");

} else if ( n == 0 ) {

      return new BigInteger("1");

} else {

     BigInteger result = new BigInteger("1");

     for ( ; n > 0 ; n -- ) {

             result = result.multiply(new BigInteger(new Integer(n).toString());

     }

     return result;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值