在线性时间中查找Array的元素的可能三元组(包括重复)的数量?

时间:2016-10-16 23:13:39

标签: 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 = 3和num可以是任何内容,因此对于大数量,它会失败。我不能使用bigInteger库,所以请帮助

1 个答案:

答案 0 :(得分:1)

如果您暂时考虑该分部,您会发现(n-b)!项对于分子和分母都是通用的(它们会被取消)。

您只需要将n!视为:

n * (n-1) * (n-2) * ...  * (n-b+1) * (n-b)!

现在你可以计算出没有任何除法或大的中间值(可能会溢出)的结果,你也可以在没有递归的情况下进行计算。