以下代码尝试计算给定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)
需要做些什么来解决这个问题?
答案 0 :(得分:4)
您必须使用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;
}