2011-10-12 59 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'是最好的方法 –