$n!$ means $n × (n − 1) × ... × 3 × 2 × 1$
For example, $10! = 10 × 9 × ... × 3 × 2 × 1 = 3628800$,
and the sum of the digits in the number $10! is 3 + 6 + 2 + 8 + 8 + 0 + 0 = 27$.
Find the sum of the digits in the number $100!$
This is pretty straight-forward, since Clojure supports arbitrary precision arithmetic. You just have to be a bit careful when writing factorial to ensure that it actually uses them instead of just overflowing:
(defn factorial [n] (reduce * (range 1N n)))In Problem 008 we had to calculate the product of the digits of a number. Since here we're calculating the sum, I figured I'd create a function that reduces the digits of a number according to some function, and define a few specializations of it:
(defn reduce-digits [f n] "Reduce the digits of `n` using some function." (loop [current (quot n 10) total (mod n 10)] (if (== 0 current) total (recur (quot current 10) (f total (mod current 10)))))) (defn prod-digits [n] "Multiply the digits of `n` together." (reduce-digits * n)) (defn sum-digits [n] "Add the digits of `n` together." (reduce-digits + n))After that, our code is pretty straight-forward:
(defn sum-factorial-digits [n] (sum-digits (factorial n)))This runs very fast:
$ lein run Processing... 648N "Elapsed time: 5.780961 msecs"
No comments:
Post a Comment