# Project Euler #20 solution in Clojure

Problem:

$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!$.

My solution in Clojure:

(reduce + (map (fn[x](Integer. (str x))) (seq (str (apply *' (range 1 101))))))


Questions:

• Is there a way to avoid the *' in the factorial bit? (apply *' (range 1 101))
• I converted the result of the factorial to a string, then to a sequence, and then mapped an Integer cast to a string cast. Surely there must be a way to simplify this?

Your first question: you could make range return a list of bigints, and reduce over it

(reduce * (range (bigint 1) 101))


1. you dont have to explicitly use seq, clojure will automatically treat your string as a seq
2. you dont have to use the full-blown string to number converter, you could for example use int to get the char code:
(map #(- (int %) (int \0)) "1234")
`