0

我正在实施 karatsuba 的方法作为练习的一部分。Karatsuba 的方法本身并不难,但其中一部分让我感到困惑。被相乘的两个数字都必须分成两半,即高位和低位。但是我找不到太多关于这种拆分是如何完成的信息。

我注意到大多数 Karatsuba 实现使用字符串来表示巨大的数字,但我正在做一些不同的事情。我将它们表示为一个整数数组,其中每个元素是巨大数字的下 30 位。请注意,这意味着这些数组可能是奇数长度。如果巨大数字的大小不是 30 的倍数,它会得到前导零,因此它仍然可以这样表示。

那么这怎么能分成高半和低半呢?我遇到的主要问题是,由于它可能是奇数长度,这意味着我不能只将数组除以它们的元素。基本上,我怎样才能选择这些 int 数组的前半部分和后半部分,以便我可以继续在 Karatsuba 的方法中递归?

只要我可以检索这些位,我就可以从它们创建两个较小的 int 数组。

4

0 回答 0