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

Scala计算1到100累乘第17次输出结果为负数的原因是什么

问题原因

你遇到的是整数溢出问题:

  • Scala中默认的Int类型是32位有符号整数,取值范围是 -2^31 到 2^31-1,也就是 -2147483648 到 2147483647。
  • 你定义的num没有显式指定类型,Scala会自动推导为Int类型。
  • 计算到16的阶乘时结果就已经达到20922789888000,远大于Int的最大取值,溢出后二进制最高位(符号位)被置为1,所以第17次打印时结果就变成了负数。

修复方案

更换num的整数类型即可解决:

  • 如果仅需要计算到20的阶乘,可以替换为64位有符号整数Long,最大支持到9223372036854775807
  • 如果要完整计算1到100的累乘,需要使用支持任意精度的BigInt类型

修复后代码示例

object Accumulate {
  def main(args: Array[String]): Unit = {
    var num = BigInt(1)
    for (a <- 1 to 100) {
      num = a * num
      println("Result:" + num + ", Time:" + a)
    }
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:54:04