c - 检测 nCr 函数中的溢出

标签 c function error-handling ncr

我这里有两个函数一起计算 nCr:

int factorial(int n) {
int c;
int result = 1;

 for (c = 1; c <= n; c++)
 {
  result = result*c;

 }

return result;
}




int nCr(int n, int r) {
int result;

 result = factorial(n)/(factorial(r)*factorial(n-r));

 return result;
}

我在执行需要执行的错误检查时遇到了问题。随着 n 变大,我将没有计算 n 的能力!并且此错误检查必须同时存在于 nCr 和阶乘中。他们都必须检测到这种溢出。

目前,当我输入一个太大而无法计算的数字时,我会从命令行返回一个 float 类型错误。

我无法解释此溢出检查。任何帮助将不胜感激,谢谢。

最佳答案

计算二项式系数的更好方法

typedef unsigned long long ull;

ull nCr(int n, int r) {
    ull res = 1;
    if (r > n - r) r = n - r;
    for (int i = 0; i < r; ++i) {
        res *= (n - i);
        res /= (i + 1);
    }
    return res;
}

关于c - 检测 nCr 函数中的溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31626295/

相关文章:

c - C 中没有 malloc 的链表

python - 包含多个语句的 Try 子句

java - 哪些异常需要方法的 throws 语句?

PHP:UPLOAD_ERR_INI_SIZE 的意义何在?

比较 C 中的两个 GUID

c - macOS 10.12 中 C 语言的位右移与 Ubuntu 16.04 不同

C++:将类作为参数传递给其他类的方法

c++ - 调用函数

r - 有没有一种方法可以跳过每个在R中引发错误的命令行,而无需对每个命令行进行 `tryCatch`处理?

c - 通过函数 : FILE* or FILE**? 的 FILE* 数组