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

为什么C++用for循环计算1到50相乘结果输出为0?

问题原因
  • 核心问题是整数类型溢出:你代码中使用的int类型通常为32位有符号整数,取值范围仅为-2^31 ~ 2^31-1(即-2147483648 ~ 2147483647),而13的阶乘就已经达到6227020800,远超出int的最大值上限。C++标准中规定有符号整数溢出属于未定义行为,后续运算结果本身不具备确定性。
  • 最终输出0的直接原因:阶乘运算会持续累积因子2,在主流x86平台的补码实现下,溢出后的数值会被截断到低32位存储,随着乘法运算推进,低32位的二进制位会逐步被0填充,当低32位全为0时,int变量存储的值就会变为0,后续乘任何整数结果都保持为0,因此最终输出0。
解决建议
  • 如果仅需要计算不超过20的阶乘,可以替换为更大的原生整数类型,比如unsigned long long(64位无符号整数,取值范围0 ~ 18446744073709551615,最多可支持存储20的阶乘)。
  • 50的阶乘数值约为3*10^64,远超过所有常规原生整数类型的存储上限,要计算正确结果需要自行实现大整数运算逻辑,或者接入第三方大整数运算库。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:36:05