int范围内的组合数已经是很大了,很多时候结果比long还大得多。
于是使用BigInteger存放:
public static String combination(int n, int m) {
BigInteger a = new BigInteger("1");
BigInteger b = new BigInteger("1");
for (int i = 1; i <= m; i++) {
b = b.multiply(new BigInteger(String.valueOf(i)));
a = a.multiply(new BigInteger(String.valueOf(n - i + 1)));
}
return a.divide(b).toString();
}
C(1000,500):
270288240945436569515614693625975275496152008446548287007392875106625428705522193898612483924502370165362606085021546104802209750050679917549894219699518475423665484263751733356162464079737887344364574161119497604571044985756287880514600994219426752366915856603136862602484428109296905863799821216320
实在是太大了