目录
1、前提背景
- 在不使用乘法符号的前提下,通过加法实现乘法。
2、解决方案
- 基于乘数,做移位运算,对每一位上应得的数值累加到结果。
- b乘数不为0则累加到结果。
- b乘数不为1则进位得到下一次要add的值。
- 核心原理解释:乘法其实就是加法加几次如果是5*3就是5+5+5,00000111为例,最右边的bit是加1次 5,倒数第二个bit表示是加2次 5(5+5),如此结合移位,即可算出5*3结果。
static int QuickAdd(int a, int b)
{
int result = 0, add = a;
while (b != 0)
{
if ((b & 1) != 0)
{
// 将此bit上的值 加入result中
result += add;
}
if (b != 1)
{
// 将此bit上的值 进位累加
add += add;
}
b >>= 1;
}
return result;
}
3、应用领域
- 既然我们可以自己实现乘法,则在累加的过程中,就可以预先判断是否result越界,如果越界int.MaxValue可以做相应的逻辑处理。
- 刷题有要求了,就可以用快速乘代替乘法