Clojure-用大数字计算

Clojure-用大数字计算,clojure,overflow,integer-overflow,Clojure,Overflow,Integer Overflow,我要计算!1000在clojure中,如何在不出现整数溢出异常的情况下执行此操作 我的阶乘代码现在是:(reduce*(range 1 1001))将N放在数字的末尾,使其成为bigint (reduce * (range 1N 1001N)) 您可以使用*'运算符,该运算符通过自动将结果提升为BigInt来支持任意精度,以防结果溢出: (reduce *' (range 1 1001)) 强制参数为clojure.lang.BigInt (reduce * (range (bigint 1

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


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

将N放在数字的末尾,使其成为bigint

(reduce * (range 1N 1001N))

您可以使用
*'
运算符,该运算符通过自动将结果提升为BigInt来支持任意精度,以防结果溢出:

(reduce *' (range 1 1001))

强制参数为
clojure.lang.BigInt

(reduce * (range (bigint 1) (bigint 1001)))
例如,如果您使用的第三方库不使用
*'

(defn factorial' [n]
   (factorial (bigint n)))

谢谢这样做更简单、更干净。用这种方式而不是用@Hamza的方式有什么优点/缺点?