为了账号安全,请及时绑定邮箱和手机立即绑定

Java计算C(n,k)和使用biginteger的阶乘

Java计算C(n,k)和使用biginteger的阶乘

幕布斯6054654 2021-05-13 14:06:28
我想计算C(n,k)的答案,例如C(10,2)= 10 * 9/2 * 1 = 45如果我用10这样的小数测试我的代码,则该代码有效。但是,当我尝试计算C(1000,900)时,它会编译线程“主”中的异常java.lang.ArithmeticException:/零我见过有人说应该使用它BigInteger,但是在尝试之后,它仍然有错误。例如:我更改int factorial 为 BigInteger factorial,而for循环为cSelect,我无法更改int i为BigInteger类型,结果,答案up/factorial(y)有误。请帮助我解决此问题。谢谢!!public class Test {    // Write a factorial function    static int factorial(int m) {        int result =1;        for (int i=2; i<=m; i++) {            result = result*i;        }        return result;    }    // Caculate C(x,y)    static int cSelect(int x, int y) {        int up=1;        for(int i=x; i>=(x-y+1); i--) {            up = up*i;        }        return up/factorial(y);    }    public static void main(String[] args) {        System.out.println(cSelect(1000,900));    }}
查看完整描述

3 回答

?
鸿蒙传说

TA贡献1865条经验 获得超7个赞

您必须使用BigInteger进行计算。

您尝试计算的值大约为6.385051192630516e + 139,并且不能表示为Java基本整数值。

即使结果是可表示的,但除以零错误的原因是除数表达式900! ∗ 100!溢出到零。然后,您将其除以零。

它溢出到零的原因是它可以被2 ^ 32和2 ^ 64整除。可以通过使用一些简单的代数来计算900中2的因数的数量来证明!和100!


查看完整回答
反对 回复 2021-05-26
  • 3 回答
  • 0 关注
  • 223 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信