C 查找线性时间内数组元素的可能三元组数(包括重复数)?
我尝试使用nCm函数查找所有组合,但对于较大的数字,它失败了C 查找线性时间内数组元素的可能三元组数(包括重复数)?,c,C,我尝试使用nCm函数查找所有组合,但对于较大的数字,它失败了 int fact(int num) { if (num == 1 || num == 0) return 1; return num * fact(num-1); } int nCm(int num, int base) { int result; return result = fact(num) / (fact(num - base)*fact(base)); } 其中base=
int fact(int num)
{
if (num == 1 || num == 0)
return 1;
return num * fact(num-1);
}
int nCm(int num, int base)
{
int result;
return result = fact(num) / (fact(num - base)*fact(base));
}
其中
base=3
和num可以是任何值,因此对于大num,它将失败。我不能使用BigQuin库,所以请帮助 < P>如果你考虑一下这个分区,你会看到<代码>(N-B)!“代码>项”对于分子和分母都是通用的(即它们相互抵消)
你只需要想想n代码>作为:
n * (n-1) * (n-2) * ... * (n-b+1) * (n-b)!
现在,您可以计算结果,而无需任何除法或较大的中间值(可能会溢出),也可以不使用递归进行计算。您可以计算n/(注)代码>不计算n代码>。此外,您可以迭代计算阶乘,而不是递归计算。最后,如果num
可以是任何东西(例如格雷厄姆的数字),那么你注定会失败。如果你真的有太多,你可以创建自己的类型,能够根据需要多少字节来保存一个数字。这取决于你的实施。