因子函数不适用于大数

Wan*_*rer 1 c++ c++11

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

unsigned long long int fact(unsigned long long int n){
    return (n == 0 || n == 1) ? 1 : fact(n - 1) * n;
}
Run Code Online (Sandbox Code Playgroud)

我的主要职责是:

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;
}
Run Code Online (Sandbox Code Playgroud)

代码工作正常,直到20,但之后返回垃圾值.

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

Dem*_*nes 10

21!是一个很大的数字,超过了unsigned long long所能容纳的数字.您只是获得了数据类型的溢出.

  • 没有内置的东西可以包含如此大的数字(好吧,浮点类型可以,但是你会失去精度),对于任意精度的整数运算,你需要编写额外的数据类型或使用它. (4认同)