问题
I want to calculate !1000
in clojure, how can I do this without getting a integer-overflow exception?
My factorial code is right now: (reduce * (range 1 1001))
.
回答1:
You could use the *'
operator which supports arbitrary precision by automatically promoting the result to BigInt in case it would overflow:
(reduce *' (range 1 1001))
回答2:
Put N at the end of the number which makes it a bigint,
(reduce * (range 1N 1001N))
回答3:
Coerce the parameters to clojure.lang.BigInt
(reduce * (range (bigint 1) (bigint 1001)))
I.e. if you are working with an third-party library that doesn't use *'
(defn factorial' [n]
(factorial (bigint n)))
来源:https://stackoverflow.com/questions/12826649/clojure-calculate-with-big-numbers