所以,简单的程序,计算一个阶乘数。代码如下。
int calcFactorial(int num)
{
int total = 1;
if (num == 0)
{
return 0;
}
for (num; num > 0; num--)
{
total *= num;
}
return total;
}
现在,这对大多数数字来说都很好用(当然有更快更优雅的解决方案,但这对我有用)。但是,当输入更大的数字(例如 250)时,坦率地说,它会出错。现在,250 的前几个阶乘“位”是 { 250, 62250, 15126750, 15438000, 3813186000 } 以供引用。
我的代码吐出 { 250, 62250, 15126750, 15438000, -481781296 } 这显然是关闭的。我的第一个怀疑可能是我违反了 32 位整数的限制,但考虑到 2^32 是 4294967296,我不这么认为。我唯一能想到的可能是它违反了 signed 32 位限制,但它不应该考虑这种事情吗?如果有符号是问题,我可以通过使整数无符号来解决这个问题,但这只是一个临时解决方案,因为下一次迭代产生 938043756000,这远远高于 4294967296 限制。
那么,我的问题是有符号限制吗?如果是这样,我可以做些什么来计算大数(虽然我有一个我刚才制作的“LargeInteger”类可能适合!)而不会再次遇到这个问题?
最佳答案
2^32 没有给你有符号整数的限制。
有符号整数限制实际上是2147483647 (如果您使用 MS 工具在 Windows 上进行开发,其他工具套件/平台可能会有自己的限制,这些限制可能类似)。
您需要一个 C++ 大数库 like this one .
关于c++ - 当我计算一个大的阶乘时,为什么我得到一个负数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/236335/