【问题标题】:Java: multiplying big numbers using linked listsJava:使用链表将大数相乘
【发布时间】:2025-12-18 23:10:02
【问题描述】:

我应该编写一个函数,将两个链表中的两个大数相乘。我需要帮助找出一种算法,它可以像在纸笔上解决它一样。这是我的想法:

我会使用嵌套的 for 循环来遍历两个列表,同时将每个元素相乘,但我不确定如何处理携带情况。我已经实现了一个添加两个整数链表的函数。任何意见将不胜感激。

【问题讨论】:

  • 递归是一种选择吗?
  • 你能展示你写的代码吗?用你已经理解的东西来解释事情会更容易,而不是想出一些可能会让你更困惑的新东西
  • Fast bignum square computation 所以要么使用天真的O(n^2) 方法或Karatsuba。但要注意 Karatsuba 需要更多进位 ...

标签: java algorithm linked-list multiplication


【解决方案1】:

我会选择递归(如果你还没有听说过递归,你可能会忽略这个答案;你迟​​早会花时间学习它)。

我以乘法 152 * 463 为例。我的计算器告诉我预期的结果是 70376。我的想法是将 2 从 152 中分离出来得到 15 和 2,然后将 15 * 463 和 2 * 463 相乘:

 15 * 463 = 6945. Needs to be multiplied by 10 because the 15 were in the 10s’ position. 6945 * 10? Just add a zero: 69450.
 2 * 463 = 926.

 Product is 69450 + 926 = 70376.

在您的代码中,15 * 463 是通过递归调用您正在编写的乘法方法获得的。乘以 10 很容易,只需附加一个零即可。 2 * 463 更简单,因为我们乘以一个 1 位数字。为这个子任务写一个新的递归方法。您已经拥有的添加两个链表的功能将完成这项工作。

【讨论】: