Проблема на самом деле не имеет ничего общего со 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
Так что вместо этого используйте (спасибо Луиджи)
x.asDigit