用于计算幂和的循环Scala
我对Scala非常陌生,我正在尝试创建一个循环来计算幂和用于计算幂和的循环Scala,scala,Scala,我对Scala非常陌生,我正在尝试创建一个循环来计算幂和(1^1+2^2+…+10^10),而不使用指数运算符 我发现1^1通过9^9计算正确。但由于某种原因,10^10在我的当前代码中计算为1410065409,并将我的最终总和输出弄乱。是什么导致了这个数学错误 我目前的代码是: var i = 1 var ex = 1 var sum = 0 while (i <= 10) { for (j <- 1 to i) { ex = ex * i
(1^1+2^2+…+10^10)
,而不使用指数运算符
我发现1^1
通过9^9
计算正确。但由于某种原因,10^10
在我的当前代码中计算为1410065409
,并将我的最终总和输出弄乱。是什么导致了这个数学错误
我目前的代码是:
var i = 1
var ex = 1
var sum = 0
while (i <= 10)
{
for (j <- 1 to i)
{
ex = ex * i
}
sum += ex
ex = 1
i += 1
}
println(s"The sum is $sum")
var i=1
var ex=1
var总和=0
而(i以下是在Scala中的实现方式
List.tabulate(10)(n => List.fill(n+1)(n.toLong+1).product).sum
//res0: Long = 10405071317
另一个选项是使用Math.pow
:
val result1 = 1.to(10).map(x => Math.pow(x, x)).sum
请注意,result1
类型为Double
,其值为1.0405071317E10
如果你想拥有它,你可以:
val result2 = 1.to(10).map(x => Math.pow(x, x).toLong).sum
然后,result2
将具有值10405071317
10^10
溢出Int
。要达到如此高的值,您需要使用Long
值。您可以突出使用math.pow
而不是列表。fill.product
也可以,因为您要对我想要的一切进行求和使用迭代器而不是列表来生成表格
谢谢@LuisMiguel。我将OP的愿望解释为“不使用指数运算符”,意思是不使用pow()
,这当然会更直接。至于迭代器
,我同意,但是列表
更短,而且它已经是一个相当长的代码行。(我应该使用(1到10)。映射(…
。这样我就不必费心于填充()
调整。)“不使用指数运算符”哦,对不起,我在阅读问题时跳过了这一部分,我的错。