【问题标题】:why two different result when using int and BigInt in scala?为什么在scala中使用int和BigInt时有两个不同的结果?
【发布时间】:2013-12-30 19:57:01
【问题描述】:

我在“不耐烦的 Scala”中做练习,我发现根据我从 Int 和 BigInt 中选择的 var 类型,我得到了两个不同的结果。

我认为我忽略了一些微不足道的事情,但不知道是什么?任何帮助,将不胜感激。谢谢。

为什么我使用以下两个代码 sn-p 会得到两个不同的结果?

var mul:BigInt= 1
for(i<-"Hello") mul = mul * i
print(mul) // mul = 9415087488

var mul:Int = 1
for(i<-"Hello") mul = mul * i
print(mul) // mul = 825152896

【问题讨论】:

  • 因为9415087488 (~10^10) 大于Int.MaxValue (~2 * 10^9)。见Integer@wiki
  • 啊。是的。傻我。感谢您的快速回复。
  • 您可能希望包含此类问题的输出等信息。更多信息使您的问题更清楚。
  • 另外:这里不需要使用var,可以使用"Hello".map{i =&gt; i: BigInt}.product"Hello".foldLeft(1: BigInt){_*_}

标签: scala


【解决方案1】:

只是为了让cmets在这里得到答案,这样问题就可以解决了……

1) BigInt 大于 Int;具体来说,它大于Int.MaxValue。您的第二个示例溢出,9415087488 是正确答案。

2) 在 Scala 中强烈建议不要使用这样的变量。更“实用”的解决方案是将字符映射到 BigInts,然后使用 .product

"Hello".map(BigInt(_)).product

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 2014-02-03
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-18
    相关资源
    最近更新 更多