我在网上看到了这个面试题,除了常用的加法外,找不到好的方法。如果这可以使用一些位移/递归或类似的东西更快地完成,有什么建议吗?
问问题
2213 次
1 回答
2
位移将是解决方案的自然部分。
要将值a乘以八位值b ,对于b中的每个 1 位,将a乘以b的所有值相加,并将所有其他位设置为 0。例如,。a * 10100001 = a * 10000000 + a * 00100000 + a * 00000001
更进一步,假设我们想乘以11001011
,0010000
这是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 回答