基本原理
由于计算机底层还是二进制,做加法往往比做乘法要快的多,因此将乘法转换为加法将大大提高计算效率。
以10×6为例子,6的二进制表示是110
所以10×6等于10×4×1+10×2×1+10×1×0=60
代码实现
long mul(long a, long k) {
long ans = 0;
while (k > 0) {
if ((k & 1) == 1) {
ans += a;
}
k >>= 1;
a += a;
}
return ans;
}
每一次循环将a的值翻倍,将k的值减半
当遇到k的最右边一位为1的时候,此时k为奇数,需要将ans加上当前的a值。