【问题标题】:Clojure - Calculate with big numbersClojure - 用大数字计算
【发布时间】:2012-10-10 19:12:55
【问题描述】:

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

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

【问题讨论】:

    标签: clojure overflow integer-overflow


    【解决方案1】:

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

    (reduce *' (range 1 1001))
    

    【讨论】:

    • 谢谢!这更容易和更清洁。
    • 以这种方式代替@Hamza 的方式有什么优点/缺点?
    【解决方案2】:

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

    (reduce * (range 1N 1001N))
    

    【讨论】:

      【解决方案3】:

      将参数强制为clojure.lang.BigInt

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多