2

我正在做一个任务,我必须实现一种递归方式来计算两个数字的组合。例如,5C3将是10。也就是说,总共 5 个对象中有 3 个对象的 10 个组合。但是,我想实现一种使用 BigInteger 类的方法,这样我就可以计算更大的组合,例如 2400 选择 3。出于某种原因,我的代码仍然返回一个负数,就像它是常规整数时的行为一样. 我在下面包含了我的代码。有人可以告诉我哪里出错了吗?

import java.math.BigInteger;
public class Combination {

public static BigInteger[][] memo = new BigInteger[3000][3000];

public static BigInteger choose(BigInteger n, BigInteger k) {

    if (n.intValue() == 0 && k.intValue() > 0) {
        return BigInteger.ZERO;
    } else if (k.intValue() == 0 && n.intValue() >= 0) {
        return BigInteger.ONE;
    } else if (memo[n.intValue()][k.intValue()] != null) {
        return memo[n.intValue()][k.intValue()];
    } else {
        memo[n.intValue()][k.intValue()] = choose(n.subtract(BigInteger.ONE), k.subtract(BigInteger.ONE)).add(choose(n.subtract(BigInteger.ONE), k));
    }
    return memo[n.intValue()][k.intValue()];

}

public static void main(String args[]) {

    if (args.length < 1) {
        System.out.println("Usage: java Combination <N> <K>");
        System.exit(0);
    }

    int H = Integer.parseInt(args[0]);
    int R = Integer.parseInt(args[1]);

    BigInteger N = BigInteger.valueOf(H);
    BigInteger K = BigInteger.valueOf(R);

    System.out.println(choose(N, K).intValue());

}

}

4

1 回答 1

4
System.out.println(choose(N, K).intValue());

应该

 System.out.println(choose(N, K).toString());
于 2012-10-08T05:24:10.243 回答