You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言阶乘x!计算代码仅输入a≤12时结果正确,是什么原因?

问题原因分析

核心问题是整数溢出:
你代码里存储阶乘结果的变量x定义为int类型,绝大多数C语言编译环境中int是32位有符号整数,可表示的最大值为2^31 - 1 = 2147483647。
计算可得:

  • 12! = 479001600,小于2147483647,所以计算结果正常
  • 13! = 6227020800,远大于32位有符号int的最大值,触发整数溢出。C语言标准中,有符号整数溢出属于未定义行为,因此会输出错误的结果。
解决方案
  • 方案1:使用取值范围更大的整数类型,比如long long(64位有符号整数,最大值为9223372036854775807,最多可正确计算到20!),修改后的代码如下:
int main()
{
    int a;
    long long x = 1;
    scanf("%d", &a);
    
    while (1 < a){
        x = a * x;
        a = (a - 1);
        printf("\n %lld", x);
    };

    printf("\n %lld", x);
    return 0;
}
  • 方案2:如果需要计算更大的阶乘,需要自己实现大整数运算逻辑,用数组存储每一位的计算结果。

内容的提问来源于stack exchange,提问作者Rayane Atoui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:06:07