【发布时间】:2013-12-17 02:36:23
【问题描述】:
我制作了这个简单的程序来计算给定数字的阶乘。对于数字 n,它是
n * (n-1) * (n-2) ....* (n-(n-1))
代码如下:
#include<stdio.h>
int main()
{
int i,n;
long fact=1;
printf("Enter a number: \t")
scanf("%d",&n);
for(i=0; i<=(n-1); i++)
{ if( n==0 || n==1)
fact =1;
else
fact*=i;
}
return 0;
}
我意识到当用户输入一个大数字时程序会崩溃。(这是合乎逻辑的)
- 我想要这个数字的限制。 (即用户可以输入的最大数量而不会使程序崩溃。)
- 有没有办法增加这个数字?
感谢任何帮助。
【问题讨论】:
-
您说的崩溃是对的。可以通过
n!是否小于表示的最大可能数来确定限制。您应该使用浮点表示来增加这个数字 -
您应该使用 limits.h 库并使用 INT_MAX 检查您的阶乘 请阅读此链接 [limits.h][1]。 [1]:publib.boulder.ibm.com/infocenter/aix/v7r1/index.jsp?topic=/…
-
无论如何这都不应该“崩溃”。整数溢出不会导致 C 程序崩溃。
-
@Andrey 我对此一无所知,但我用大数字进行了尝试,窗口变为非活动状态且无响应。 (我使用的是 Turbo C++)。
-
如果你让它运行足够长的时间,它就会返回。它正在变得不活跃,因为它正在运行大量的乘法。它没有“崩溃”。
标签: c for-loop long-integer