给你两个正整数求他们的乘积,要求不用*运算符。

方法一:累加求和

最朴素的思想, a * b = b 个 a 相加
时间复杂度为O(n)

  1. long mul(int a, int b) {
  2. long ans = 0;
  3. while (b > 0) {
  4. ans += a;
  5. b--;
  6. }
  7. return ans;
  8. }

方法二:龟速乘

采用倍增思想,结合2的幂。时间复杂度为O(logn)

  1. long mul(int a, int b) {
  2. long ans = 0;
  3. while (b > 0) {
  4. if ((b & 1) == 1) {
  5. ans += a;
  6. }
  7. a += a;
  8. b >>= 1;
  9. }
  10. return ans;
  11. }