阶乘计算在我的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;
}