幸运的是,这个程序可以很好地找到1到12的阶乘,但在12之后,13,14,20 .....输出出错了,我也试图找到40的阶乘,输出为0。 无法找到确切的问题......
www.example.com/my-file.php
答案 0 :(得分:7)
你得到integer overflow。在大多数机器上,int
是32位宽(显然已签名)。这意味着它可以代表的最大数字是2 ^ 31-1,即2147483648。12!工作原因是479001600(小于2 ^ 31-1)但是13!是6227020800.所以13!通常不能用int
表示。
您拥有的一个选项是让i
,user_input
和tbl
成为更大的类型,例如unsigned long long
或uint64_t
(来自{{1} }})。但是这些类型也有最大可表示的数字。
如果您确实需要C中的任意精度,您可能需要考虑GMP (The GNU Multiple Precision Arithmetic Library)。
另请注意,签名类型的溢出在C中具有未定义的行为。
答案 1 :(得分:0)