我想计算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!
添加回答
举报
0/150
提交
取消