给你两个正整数求他们的乘积,要求不用*
运算符。
方法一:累加求和
最朴素的思想, a * b = b 个 a 相加
时间复杂度为O(n)
long mul(int a, int b) {
long ans = 0;
while (b > 0) {
ans += a;
b--;
}
return ans;
}
方法二:龟速乘
采用倍增思想,结合2的幂。时间复杂度为O(logn)
long mul(int a, int b) {
long ans = 0;
while (b > 0) {
if ((b & 1) == 1) {
ans += a;
}
a += a;
b >>= 1;
}
return ans;
}