Project Euler: Problem34
n桁の数と9!*nを比べて、9!*nが追いつけなくなるnをまず見つける。するとnは7だとわかるので、7桁まで探せば十分。
/* 9!*1 = 362880 9!*2 = 725760 ... 9!*7 = 2540160 (7keta) 9!*8 = 2903040 (7keta) */ object Problem34 { def fact(n:int) : int = if (n<=1) 1 else n * fact(n-1) def main(args:Array[String]) : unit = { var result = 0 val ls = List(0,1,2,3,4,5,6,7,8,9) for (x0<-ls; x1<-ls; x2<-ls; x3<-ls; x4<-ls; x5<-ls; x6<-ls) { val facts = List(x0,x1,x2,x3,x4,x5,x6). dropWhile(n => n==0).map(fact).foldLeft(0)((n,m) => n+m) if (x0*1000000+ x1*100000+ x2*10000+ x3*1000+ x4*100+ x5*10+ x6*1 == facts) { println(facts) result += facts } } println("Result:",result-(1+2)) } }