阶乘计算在我的C程序中不正确? #包括 #包括 int main() { 长符号事实=1; int c,n; printf(“待计算的阶乘:”); scanf(“%d”和“&n”); 对于(c=1;c

阶乘计算在我的C程序中不正确? #包括 #包括 int main() { 长符号事实=1; int c,n; printf(“待计算的阶乘:”); scanf(“%d”和“&n”); 对于(c=1;c,c,factorial,C,Factorial,来说,long在您的平台上可能是32位的(您可以通过打印sizeof(long)的值来发现)。13!大于2^32-1(32位无符号值的最大可能值),因此溢出 尝试使用uint64\t(来自)来代替。奥利所说的是正确的——C标准保证长度至少为32位。在某些平台上可能更长 您可以使用unsigned long long。这将至少是64位,但它仍然只允许您最多计算20位 C FAQ对整数大小有一个很好的概述:您可能需要查找任意精度的库 否则,如果您只想近似更大的阶乘,也许可以使用 #include &

来说,
long
在您的平台上可能是32位的(您可以通过打印
sizeof(long)
的值来发现)。13!大于2^32-1(32位无符号值的最大可能值),因此溢出

尝试使用
uint64\t
(来自
)来代替。

奥利所说的是正确的——C标准保证
长度至少为32位。在某些平台上可能更长

您可以使用
unsigned long long
。这将至少是64位,但它仍然只允许您最多计算20位

C FAQ对整数大小有一个很好的概述:您可能需要查找任意精度的库

否则,如果您只想近似更大的阶乘,也许可以使用

#include <stdio.h>
#include <conio.h>

int main()
{
  long signed fact=1;

  int c, n ;

  printf("Factorial to be calculated: ");
  scanf("%d", &n);

  for (c = 1; c <= n; c++)
  fact = fact * c;

  printf("Factorial of %d = %ld\n", n, fact);
  getch();
  return 0;
}