阶乘函数不适用于大数

Factorial function does not work with large numbers

本文关键字:适用于 不适用 函数 阶乘      更新时间:2023-10-16

我正在尝试编写一个函数来计算给定数字的阶乘,我定义如下:

unsigned long long int fact(unsigned long long int n){
    return (n == 0 || n == 1) ? 1 : fact(n - 1) * n;
}

我的主要功能是:

int main(int argc, const char * argv[]) {
    unsigned long long int z;
    cout << "Please eneter the number: ";
    cin >> z;
    z = fact(z);
    cout << z << endl;
    return 0;
}

代码在 20 之前工作正常,但在返回垃圾值之后。

我知道我可以使用数组解决问题,但我不明白为什么程序以这种行为运行?

21!是一个很大的数字,超过了无符号长长可以容纳的数字。您只是获得数据类型的溢出。

相关文章: