[英]try to make a factorial program in C
幸运的是,这个程序工作正常,找到1到12的阶乘,但在12,13,14,20 .....输出出错,我也试图找到40的阶乘,输出为0.未能找到确切的问题......
#include <stdio.h>
int main() {
int user_input, tbl;
printf("Enter any number: \t");
scanf("%i", &user_input);
tbl = user_input;
for(int i=2; i < user_input; i++) {
tbl = tbl * i;
}
printf("Factorial of %i is %i", user_input, tbl);
}
你得到一个整数溢出 。 在大多数机器上, int
是32位宽(显然是签名的)。 这意味着它可以代表的最大数字是2 ^ 31-1,即2147483648。12! 工作原因是479001600(小于2 ^ 31-1)但是13! 是6227020800.所以13! 通常不能用int
表示。
你有一个选择是使i
, user_input
和tbl
成为更大的类型,例如unsigned long long
或uint64_t
(来自#include <inttypes.h>
)。 但是这些类型也具有最大可表示的数字。
如果您确实需要C中的任意精度,您可能需要考虑GMP(GNU多精度算术库) 。
另请注意,签名类型的溢出在C中具有未定义的行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.