我正在尝试编写一个函数来计算给定数字的阶乘,我定义如下:
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,但之后返回垃圾值。
我知道我可以使用数组解决问题,但我不明白为什么程序会以这种行为运行?
答案 0 :(得分:10)
21!是一个很大的数字,超过了unsigned long long所能容纳的数字。您只是获得了数据类型的溢出。