Euler : Problem 20

Posted by YpsilonTAKAI On 2011年5月4日水曜日 0 コメント

やっと20番目まで来た。

100!を計算して各ケタ足したんだけど、他のやりかたあるんだろうか。



;;
;; Problem 20 : 2011/4/27
;; "Elapsed time: 7.363226 msecs"

;; momoise : from clojure.org
(use 'clojure.contrib.math)

(defn memoize [f]
(let [mem (atom {})]
(fn [& args]
(if-let [e (find @mem args)]
(val e)
(let [ret (apply f args)]
(swap! mem assoc args ret)
ret)))))

(defn fact [n]
(if (= n 1)
1
(* n (fact (dec n)))))

(def fact (memoize fact))
(map fact (range 1 100))

(loop [num (fact 100)
result 0]
(if (< num 1)
result
(recur (floor (/ num 10))
(+ result (rem num 10)))))
;;

0 コメント:

コメントを投稿