给定一个 n 位整数和一个 m 位整数。我如何在 LISP 中使用列表、数组或任何其他 Lisp 特定数据类型将它们相乘?
例如;
a(1)a(2)...a(n)
b(1)b(2)...b(m)
结果为;
r(1)r(2)...r(m+n)
最佳答案
Common Lisp 已经bignums天生的。为什么不用它们?
你基本上不需要特别声明任何东西,它们“神奇地”发生了:
% sbcl
This is SBCL 1.0.56.0.debian, an implementation of ANSI Common Lisp.
* (defun fact (n) (if (< n 1) 1 (* n (fact (- n 1)))))
FACT
* (fact 50)
30414093201713378043612608166064768844377641568960512000000000000
所以有了 Common Lisp,你基本上不必费心......
附录
高效的 bignum 算法是一个非常困难的问题;高效算法比朴素算法具有更好的复杂性;你可以找到解释它们的困难书籍(基础数学非常困难)。另见 this answer .
如果你想做一个有竞争力的bignum实现,准备努力几年,把它写成博士论文。
关于lisp - 如何将 LISP 中的两个大整数相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10367485/