Clojure - 用大数字计算

时间:2012-10-10 19:12:56

标签: clojure overflow integer-overflow

我想在clojure中计算!1000,如何在不获取整数溢出异常的情况下执行此操作?

我的阶乘代码现在是:(reduce * (range 1 1001))

3 个答案:

答案 0 :(得分:21)

您可以使用支持任意精度的*'运算符,方法是将结果自动提升为BigInt,以防它溢出:

(reduce *' (range 1 1001))

答案 1 :(得分:6)

将N放在数字的末尾,这使得它变得很大,

(reduce * (range 1N 1001N))

答案 2 :(得分:2)

将参数强制转换为clojure.lang.BigInt

(reduce * (range (bigint 1) (bigint 1001)))

即。如果您正在使用不使用*'

的第三方库
(defn factorial' [n]
   (factorial (bigint n)))