利用位运算,乘数每次右移一位,被乘数每次左移一位.
#include <iostream>
#include <math.h>
/*
不适用乘号实现乘法
*/
int multiply(int a, int b) {
int res = 0;
a = fabs(a); //求绝对值
b = fabs(b);
while (a) {
int t = a & 1;
if (t == 1) { //若a最右边为1 则加上被乘数
res += b;
}
a = a >> 1; //a右移
b = b << 1;//b左移
}
if ((a < 0 && b < 0) || (a>0 && b>0)) { //若a b同号 则返回正数
return res;
}
else { //a b异号 则返回负数
return -res;
}
}
int main(){
std::cout << multiply(-32, -3); //96
return 0;
}