lisp - 如何将 LISP 中的两个大整数相乘

标签 lisp common-lisp

给定一个 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/

相关文章:

function - 为什么我不能在 Common lisp 中使用从列表中提取的函数符号(#')?

sockets - 在Lisp中获取已连接客户端的IP地址

list - 列表的组合列表

common-lisp - 通用 Lisp : how to access a row of a certain multi-dimension array?

list - 使用迭代递归函数在 Lisp 中构建列表

lisp - dolist 推送错误

list - 在 LISP 中实现基本库函数(手动)

lisp - Common Lisp 值的防御副本

lisp - 测试一个类是否是普通 lisp 中另一个类的子类

loops - 通用 Lisp : How to build a loop expression with a macro?