递归乘法
写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。
(要考虑极限数值)
示例1:
输入:A = 1, B = 10
输出:10
示例2:
输入:A = 3, B = 4
输出:12
方法一 用递归的
class Solution {
int i=0;//存储结果
int j=0;//存储倍数
int k=0;//存储倍数后的值
public int multiply(int A, int B) {
if(k==0){
k=A;//放入倍数
j=1;//放入倍数后的值
}
if(B!=0){
if(j>B){//当剩余B不足以减去倍数时 倍数归1 倍数值归A值
j=1;
k=A;
}
i+=k;//加倍数值
B-=j;// 减倍数
j+=j;//倍数翻倍
k+=k;//倍数值翻倍
multiply(A,B);
}
return i;//输出结果
}
}
方法二 不用递归的
class Solution {
public int multiply(int A, int B) {
int i=0;//存储结果
int j=1;//存储倍数
int k=A;//存储倍数后的值
while(B!=0){
i+=k;// 加倍数值
B-=j;// 减倍数
j+=j;//倍数翻倍
k+=k;//倍数值翻倍
if(j>B){//当剩余B不足以减去倍数时
j=1;//倍数归1
k=A;//倍数值归A值
}
}
return i;//输出结果
}
}