我想在clojure中计算!1000
,如何在不获取整数溢出异常的情况下执行此操作?
我的阶乘代码现在是:(reduce * (range 1 1001))
。
答案 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)))