1

我在网上看到了这个面试题,除了常用的加法外,找不到好的方法。如果这可以使用一些位移/递归或类似的东西更快地完成,有什么建议吗?

4

1 回答 1

2

位移将是解决方案的自然部分。

要将值a乘以八位值b ,对于b中的每个 1 位,将a乘以b的所有值相加,并将所有其他位设置为 0。例如,。a * 10100001 = a * 10000000 + a * 00100000 + a * 00000001

更进一步,假设我们想乘以110010110010000这是11001011(bin) << 4(dec)。对 8 位值执行此操作会得到10110000. 你也(8-4)=4从一开始就丢失了比特。因此,您还需要11001011(bin) >> 4(dec)作为00001100进位进入下一个“8 位列”(假设我们使用 8 列来表示 64 位答案)。

递归实际上是不必要的。您所需要的只是循环遍历第一个 32 位数字的 4 个字节,再循环遍历第二个数字的 4 个字节,依次将每对字节相乘并将其添加到您的解决方案中。

于 2013-09-15T18:35:33.910 回答