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

如何计算大于12的整数的阶乘?C语言实现时输入12以上数值结果为0怎么解决

问题根因

  • 32位有符号int的最大正值为2147483647,而13的阶乘为6227020800,已经远超过该上限,触发有符号整数溢出,这是C语言标准规定的未定义行为,你看到输出0是溢出后数值回卷的结果。
  • 改为long int后输出乱码有两个原因:
    1. 32位环境下long int同样占4字节,取值范围和int完全一致,还是无法承载大于12的阶乘,溢出问题没有解决
    2. 你只修改了变量类型,printf输出时还是用了对应int的格式化符%d,类型不匹配也会导致输出异常

修复方案

适配20以内阶乘计算

改用64位有符号整数类型long long,其最大正值为9223372036854775807,可以覆盖到20的阶乘(20! = 2432902008176640000),同时修改对应输出格式化符为%lld,另外建议把负数判断前置,避免输入负数时执行无效循环。修改后代码如下:

#include <stdio.h>

int main()
{
  int c, n;
  long long f = 1;

  printf("Enter a number to calculate its factorial\n");
  scanf("%d", &n);
  
  if (n < 0) {
    printf("Cannot calculate the factorial of a negative number\n");
    return 0;
  }
  
  for (c = 1; c <= n; c++) {
    f = f * c;
  }

  printf("Factorial of %d = %lld\n", n, f);   
  return 0;
}

计算20以上的阶乘

C标准库没有内置大整数支持,需要自行实现数组模拟大整数乘法,或者引入第三方大整数运算库实现。

内容的提问来源于stack exchange,提问作者Daniel Bland

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 03:27:02