为什么较高的范围产品回答为Kotlin为0

  • 本文关键字:Kotlin 范围 kotlin
  • 更新时间 :
  • 英文 :


为什么(1..100)为产品工作减少?

>>> (1..100).toList().reduce { acc, i -> acc * i }
0
>>> (1..10).toList().reduce { acc, i -> acc * i }
3628800

谢谢

基本上是值溢出。当您使用long时,很明显:

fun main(args: Array<String>) {
    println("Max int: " + Int.MAX_VALUE)
    println("1..12 int: " + (1..12).toList().reduce { acc, i -> acc * i })
    println("1..12 long: " + (1L..12L).toList().reduce { acc, i -> acc * i })
    println("---")
    println("Max long: " + Long.MAX_VALUE)
    println("1..13 int: "  + (1..13).toList().reduce { acc, i -> acc * i })
    println("1..13 long: "  + (1L..13L).toList().reduce { acc, i -> acc * i })
}

输出:

Max int: 2147483647
1..12 int: 479001600
1..12 long: 479001600
---
Max long: 9223372036854775807
1..13 int: 1932053504
1..13 long: 6227020800

最高12,乘法的结果值总是比Int.MAX_VALUE小,并且如上所述,使用int和long返回的结果是相同的。

从13开始,OTOH,结果会改变。使用int S时值溢出,结果开始是错误的。long仍然有效(您可以看到,返回的值大于Int.MAX_VALUE

简短的答案是该值高于其限制。

最新更新