题目描述:
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
示例1:
输入:A = 1, B = 10
输出:10
示例2:
输入:A = 3, B = 4
输出:12
思路:
利用快速幂的想法,做快速加法
并且结合位运算
代码如下:
class Solution {
public:
int multiply(int A, int B) {
if(A>B) return multiply(B,A);
int res=0;
while(A>0){
if(A&1==1){
res+=B;
}
A>>=1;//左移一位==变成原来的一半
B<<=1;//右移一位==变成原来的2倍
}
return res;
}
};