题目
递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
示例1:
输入:A = 1, B = 10
输出:10
1
2
2
示例2:
输入:A = 3, B = 4
输出:12
1
2
2
提示:
- 保证乘法范围不会溢出
题解
java
public int multiply(int A, int B) {
// 递归出点
if (A == 0 || B == 0) {
return 0;
}
// 以3*4为例 拆分成 2*4 + 1*4 + 0
// 若是25*4 拆分成 16*4 + 8*4 + 1*4 + 0
int i = 31;
// 找到最高位的1
while ((A & 1 << i) == 0) {
i--;
}
// 递归拆分
return (B << i) + this.multiply(A - (1 << i), B);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18