我实施karatsuba的方法作为练习的一部分。 Karatsuba的方法本身并不是非常困难,但其中一部分让我感到困惑。两个数相乘必须分成两半,即高位和低位。但我无法找到有关如何完成分割的更多信息。
我注意到大多数Karatsuba实现使用字符串来表示大量数字,但我做了一些不同的事情。我将它们表示为一个整数数组,其中每个元素是数字的下一个30位。请注意,这意味着这些数组可能是奇数长度。如果数字的大小不是30的倍数,它会得到前导零,因此它仍然可以表示为。
那怎么能分成高低两半呢?我遇到的主要问题是,因为它可能是奇数长度,这意味着我不能只按其元素划分数组。基本上,我如何选择这些int数组的第一个和最后一个半部分,以便我可以继续在Karatsuba方法中递归?
只要我可以检索这些位,我就可以从它们创建两个较小的int数组。