尝试在C中制作一个阶乘程序

时间:2016-01-19 10:07:11

标签: c factorial

幸运的是,这个程序可以很好地找到1到12的阶乘,但在12之后,13,14,20 .....输出出错了,我也试图找到40的阶乘,输出为0。 无法找到确切的问题......

www.example.com/my-file.php

2 个答案:

答案 0 :(得分:7)

你得到integer overflow。在大多数机器上,int是32位宽(显然已签名)。这意味着它可以代表的最大数字是2 ^ 31-1,即2147483648。12!工作原因是479001600(小于2 ^ 31-1)但是13!是6227020800.所以13!通常不能用int表示。

您拥有的一个选项是让iuser_inputtbl成为更大的类型,例如unsigned long longuint64_t(来自{{1} }})。但是这些类型也有最大可表示的数字。

如果您确实需要C中的任意精度,您可能需要考虑GMP (The GNU Multiple Precision Arithmetic Library)

另请注意,签名类型的溢出在C中具有未定义的行为。

答案 1 :(得分:0)

  • 8位无符号字符最大值:0xFF - > 255 - > 2 ^ 8 - 1(字符)2 ^ 7 -1
  • 16位无符号短最大值:0xFFFF - > 2 ^ 16 - 1(短)2 ^ 15 - 1
  • 32bit unsigned int Max:0xFFFFFFFF - > 2 ^ 32 - 1(int)2 ^ 31 - 1
  • 64bit unsigned ..... Max:... - > 2 ^ 64 - 1(长很长)2 ^ 63 - 1
  • 所有人都有Range.This不是写在纸上的数字。