gpt4 book ai didi

计算 nCr 的 Java 程序抛出算术异常 "Divide by zero"

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:07 25 4
gpt4 key购买 nike

以下代码尝试计算给定 n 的各种值的 nCr 值,这里 r 从 0 到 n。

输入格式如下:-

输入格式

第一行包含测试用例的数量 T。接下来是 T 行,每行包含一个整数 n。

约束

 1<=T<=200 
1<=n< 1000

输出格式

对于每个 n 输出 nC0 到 nCn 的列表,每一个在新行中由一个空格分隔。如果数字很大,只打印最后 9 位数字。即模 10^9

因此示例输入具有以下格式:-

 3
2
4
5

样本输出格式如下:-

 1 2 1
1 4 6 4 1
1 5 10 10 5 1

这是代码

 import java.io.*;
import java.util.*;
import java.math.*;

public class Solution {

public static void main(String[] args) {
/* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */

Scanner scan = new Scanner(System.in);
int n = scan.nextInt();
int j = 0;

for(int i = 0; i < n; i++){
int a = scan.nextInt();
j = 0;
while(j <= a){
if( j == 0 || j == a){
System.out.print(1 + " ");
}
else if( j == 1 || j == (a - 1)){
System.out.print(a + " ");
}else{
BigInteger a1 = (Num(a,j));
BigInteger b1 = BigInteger.valueOf(fact(j));
BigInteger c1 = a1.divide(b1);
BigInteger x1 = BigInteger.valueOf(1000000000);
System.out.print( c1.mod(x1) +" ");
}
j++;
}
System.out.println();

}
}

public static BigInteger Num(int a, int j){
BigInteger prod = BigInteger.valueOf(1);
for(int k = 0; k < j; k++){
int z = a - k;
BigInteger b = BigInteger.valueOf(z);
prod = prod.multiply(b);
}
return prod;
}

public static long fact(long j){
long prod = 1;
for(long i = j; i > 0; i--){
prod *= i;
}
return prod;
}
}

它清除了一些测试用例,但在许多测试用例中都失败了。说运行时错误,当我在 1 999 的输入上测试它时,它抛出了算术异常“除以零”。

这是异常日志:-

      Exception in thread "main" java.lang.ArithmeticException: BigInteger divide by zero
at java.math.MutableBigInteger.divideKnuth(MutableBigInteger.java:1179)
at java.math.BigInteger.divideKnuth(BigInteger.java:2049)
at java.math.BigInteger.divide(BigInteger.java:2030)
at Solution.main(Solution.java:25)

需要做什么来解决这个问题?

最佳答案

您必须使用 BigInteger 来计算不超过 1000 的阶乘。

public static BigInteger fact(long j){
BigInteger prod = BigInteger.ONE;
for(long i = j; i > 0; i--){
BigInteger f = BigInteger.valueOf( i );
prod = prod.multiply( f );
}
return prod;
}

关于计算 nCr 的 Java 程序抛出算术异常 "Divide by zero",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28712590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com