信息技术段子手 2022-08-17 15:41 采纳率: 87.5%
浏览 50
已结题

对于一个代码结果不明白:求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的阶乘吗?

  • 写回答

5条回答 默认 最新

  • 於黾 2022-08-17 15:46
    关注

    那么是谁告诉你不考虑溢出的情况下最大只能求33的阶乘的
    如果是理论上假设int可以存无限大的数
    那你求到100的阶乘也没有问题呀
    而实际上你要运行这段程序,那怎么可能不考虑溢出呢,溢出是客观存在的
    -=-=-=-=
    你看到求到33它还能显示一个值,而求到34它就变成0了,就以为最大只能求33,可是求34它不是也运行的好好的吗,没有崩溃呀
    而它显示为0了,本质上还是因为溢出
    一开始溢出的位数不多,低位还有数,所以会显示一个数
    溢出的多了,低位全是0了,不显示0显示什么
    -=-==-=-
    如果你只看结果是不是一个非0的数字,而不看它的答案对不对,就管这叫“不考虑溢出”
    我觉得你对什么是不考虑溢出有很深的误解

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 8月25日
  • 已采纳回答 8月17日
  • 创建了问题 8月17日

悬赏问题

  • ¥15 目详情-五一模拟赛详情页
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line