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?
1 Answer 1
Your first question: you could make range return a list of bigints, and reduce over it
(reduce * (range (bigint 1) 101))
your second question: :
- you dont have to explicitly use
seq
, clojure will automatically treat your string as a seq 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")`
- for other ways of getting digits of a number, check out this thread