12

我想!1000在 clojure 中计算,如何在不出现整数溢出异常的情况下做到这一点?

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

4

3 回答 3

23

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

(reduce *' (range 1 1001))
于 2012-10-10T19:29:16.247 回答
6

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

(reduce * (range 1N 1001N))
于 2012-10-10T19:24:24.350 回答
2

强制参数为clojure.lang.BigInt

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

即,如果您正在使用不使用的第三方库*'

(defn factorial' [n]
   (factorial (bigint n)))
于 2012-10-10T19:59:16.167 回答