为什么在scala中使用int和BigInt会产生两种不同的结果?
我在做“不耐烦的Scala”的练习,我发现基于我从Int和BigInt中选择的var类型,我得到了两个不同的结果 我想我忽略了一些琐碎的事情,但不知道是什么?任何帮助都将不胜感激。谢谢 为什么我用下面的两个代码片段得到两个不同的结果为什么在scala中使用int和BigInt会产生两种不同的结果?,scala,Scala,我在做“不耐烦的Scala”的练习,我发现基于我从Int和BigInt中选择的var类型,我得到了两个不同的结果 我想我忽略了一些琐碎的事情,但不知道是什么?任何帮助都将不胜感激。谢谢 为什么我用下面的两个代码片段得到两个不同的结果 var mul:BigInt= 1 for(i<-"Hello") mul = mul * i print(mul) // mul = 9415087488 var mul:Int = 1 for(i<-"Hello") mul = mul * i 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
var mul:BigInt=1
因为(我只是想把评论变成一个答案,这样问题就可以解决了
1) BigInt
大于Int
;具体来说,它大于Int.MaxValue
。您的第二个示例已满,9415087488
是正确答案
2) 在Scala中强烈反对使用这样的变量。更“实用”的解决方案是将字符映射到bigint,然后使用.product
"Hello".map(BigInt(_)).product
因为9415087488
(~10^10
)大于Int.MaxValue
(~2*10^9
)。看,啊。对我真傻。感谢您的快速响应。您可能希望包含类似于此类问题的输出的信息。更多信息使您的问题更清楚。另外:您不需要在这里使用var
,您可以使用“Hello”.map{i=>i:BigInt}.product
或“Hello”.foldLeft(1:BigInt){u*}
。