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

求前n个数乘积遇大n结果错误,疑溢出如何解决?

解决前n个数乘积取模的整数溢出问题

你的判断完全正确,就是整数溢出导致的错误。long类型的存储范围有限(64位long最大值约为9×10¹⁸),当n超过20时,n!的结果就会超出这个范围,溢出后变量ans会变成错误的数值,最后取模自然得不到正确结果。

解决方法很直接,利用模运算的分配律,在每一次乘法操作后立即对结果取模,这样能始终把ans的数值控制在1000000007以内,彻底避免溢出。修改后的代码如下:

long ans = 1;
final int MOD = 1000000007;
for (int i = 1; i <= n; i++) {
    ans = (ans * i) % MOD;
}
return ans;

核心说明

  • 模运算的基本性质:(a * b) % mod = [(a % mod) * (b % mod)] % mod,每一步取模不会改变最终结果的正确性。
  • 把1000000007定义为常量MOD,既能提升代码可读性,也能避免重复输入出错。
  • 哪怕n取值非常大(比如1e5甚至更大),这种写法都能稳定运行,不会再出现溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 05:34:53