如果有任何方法可以从块中调用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没有返回值,每次都是0
如何解决?
谢谢!
答案 0 :(得分:7)
问题实际上与Scala本身无关;你的代码和你的def
都没问题。问题出在toInt
:
scala> '3'.toInt
res7: Int = 51
toInt
实际上并不将其转换为十进制数字,而是作为unicode(ish?)字符值。这些产生的数字非常大,超出了factor
可以处理的范围:
scala> factor(6)
res8: Int = 720
scala> factor(20)
res9: Int = -2102132736
scala> factor(100)
res10: Int = 0
所以改为使用(感谢Luigi)
x.asDigit