您需要一个大整数库来获取结果,因为
binom(1500,750) = 722462892448930217028116073228485295944376343040546523665632913653613596406381727723198055046187955623124069093412562720869577867557610868874271130828359513282184417776042792372322074253393127328396528996120053749558122610911178218582669317535346728464707661495135518682519172221470420360910320792434869988224466647627642393919250205687942318888922893189087379790541907686956429837978631252775258630376332505697937034877619012586751274240109457111424
甚至超出了通常的double范围。
但是有了这样的类型,关系
binom(n,k+1) = binom(n,k)*(n-k)/(k+1)
允许一个简单、相对有效的实现:
bigint value = 1;
int numerator = 1500 + 1, denominator = 0;
for(; denominator <= 1500; --numerator, ++denominator, value = value*numerator/denominator)
{
output(value);
}
output图书馆提供的任何输出方法在哪里。
如果库不提供用于乘法/除法 biginteger 和 normal s 的value = value*numerator/denominator重载,则需要调整该部分。int