我在网上看到了这个面试问题,除了通常的添加方法之外,找不到好的方法。 任何建议,如果可以使用一些bithift /递归或类似的东西更快地完成?
答案 0 :(得分:2)
Bitshifting将是解决方案的自然组成部分。
要将值 a 乘以8位值 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个字节,依次将每对字节相乘并将其添加到你的解决方案中。