Tôi muốn tính !1000
trong clojure, làm cách nào tôi có thể thực hiện việc này mà không nhận được ngoại lệ tràn số nguyên?Clojure - Tính toán với số lớn
Mã giai thừa của tôi là ngay bây giờ: (reduce * (range 1 1001))
.
Tôi muốn tính !1000
trong clojure, làm cách nào tôi có thể thực hiện việc này mà không nhận được ngoại lệ tràn số nguyên?Clojure - Tính toán với số lớn
Mã giai thừa của tôi là ngay bây giờ: (reduce * (range 1 1001))
.
Bạn có thể sử dụng toán tử *'
mà hỗ trợ chính xác tùy ý bằng cách tự động phát huy kết quả để bigint trong trường hợp nó sẽ tràn:
(reduce *' (range 1 1001))
Đặt N ở phần cuối của số mà làm cho nó một bigint,
(reduce * (range 1N 1001N))
ép buộc các thông số để clojure.lang.BigInt
(reduce * (range (bigint 1) (bigint 1001)))
I.e. nếu bạn đang làm việc với thư viện của bên thứ ba không sử dụng *'
(defn factorial' [n]
(factorial (bigint n)))
Cảm ơn! Đó là một chút dễ dàng hơn và sạch hơn. – Sawny
Ưu điểm/khuyết điểm của việc làm theo cách này thay vì cách của Hamza là gì? – Sawny
Nó có thể chấp nhận đầu vào tùy ý. @Hamza nên sử dụng 'bigint' – noahlz