2011-10-12 51 views
2

内如果有什么办法可以在年底从块调用一个DEF块

def factor (n: Int) : Int = if (n == 0) 1 else n * factor(n-1) 

val i = 1000 

i.toString.foreach (x => sum += factor(x.toInt)) 

调用一个DEF我想每个数字

的阶乘的总和,但它似乎像def不返回值,每次都是0

如何解决?

谢谢!

回答

7

这个问题实际上与Scala本身无关;你的代码和你的def都很好。问题是toInt

scala> '3'.toInt 
res7: Int = 51 

toInt实际上并没有将它转换为十进制数,但作为一个Unicode(英语?)字符值。这些都产生非常大的数字,其超越什么factor可以处理:

scala> factor(6) 
res8: Int = 720 

scala> factor(20) 
res9: Int = -2102132736 

scala> factor(100) 
res10: Int = 0 

因此,而不是使用(感谢路易吉)

x.asDigit 
+0

或者x.toString.toInt - 我觉得这是更具可读性。 – Rogach

+0

@Rogach是的,我同意。我会改变它。 – Owen

+3

'x.asDigit'是最好的方法 –