代码如下:
int Fac(int n)
{
if (n <= 1)
return 1;
else
return n * Fac(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fac(n);
printf("%d\n", ret);
return 0;
}
问题:我想知道为什么不考虑溢出的情况下这段代码最大只能求33的阶乘?不是说求n的阶乘吗?
代码如下:
int Fac(int n)
{
if (n <= 1)
return 1;
else
return n * Fac(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Fac(n);
printf("%d\n", ret);
return 0;
}
问题:我想知道为什么不考虑溢出的情况下这段代码最大只能求33的阶乘?不是说求n的阶乘吗?
那么是谁告诉你不考虑溢出的情况下最大只能求33的阶乘的
如果是理论上假设int可以存无限大的数
那你求到100的阶乘也没有问题呀
而实际上你要运行这段程序,那怎么可能不考虑溢出呢,溢出是客观存在的
-=-=-=-=
你看到求到33它还能显示一个值,而求到34它就变成0了,就以为最大只能求33,可是求34它不是也运行的好好的吗,没有崩溃呀
而它显示为0了,本质上还是因为溢出
一开始溢出的位数不多,低位还有数,所以会显示一个数
溢出的多了,低位全是0了,不显示0显示什么
-=-==-=-
如果你只看结果是不是一个非0的数字,而不看它的答案对不对,就管这叫“不考虑溢出”
我觉得你对什么是不考虑溢出有很深的误解