LeetCode面试题 08.05. 递归乘法
题目描述
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
思路
循环左移A达到乘的目的,当大于B时退出循环,记录与目标值B的差值A1,A自增A1次即可。
class Solution {
public int multiply(int A, int B) {
if (A == 0 || B == 0) return 0;
int A1 = A;
int temp = 1;
while (temp << 1 <= B) {
temp = temp << 1;
A = A << 1;
}
if (B - temp != 0) {
int add = A1;
for (int i = 1; i < B - temp; i++) {
A1 += add;
}
for (int i = 0; i < A1; i++) {
A++;
}
}
return A;
}
}