用于计算幂和的循环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

我对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 
   }

   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)。映射(…
。这样我就不必费心于
填充()
调整。)“不使用指数运算符”哦,对不起,我在阅读问题时跳过了这一部分,我的错。