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

我想计算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));


    }


}


幕布斯6054654
浏览 224回答 3
3回答

鸿蒙传说

您必须使用BigInteger进行计算。您尝试计算的值大约为6.385051192630516e + 139,并且不能表示为Java基本整数值。即使结果是可表示的,但除以零错误的原因是除数表达式900! ∗ 100!溢出到零。然后,您将其除以零。它溢出到零的原因是它可以被2 ^ 32和2 ^ 64整除。可以通过使用一些简单的代数来计算900中2的因数的数量来证明!和100!
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java