递归乘法

题目描述

来源于 https://leetcode-cn.com/

递归乘法。 写一个递归函数,不使用 * 运算符, 实现两个正整数的相乘。可以使用加号、减号、位移,但要吝啬一些。

示例1:

 输入:A = 1, B = 10
 输出:10

示例2:

 输入:A = 3, B = 4
 输出:12

提示:

  1. 保证乘法范围不会溢出

解法:

计算 A * B,设 B = 0b1011,则 A*B 可以解释为: A * 8 + A * 2 + A * 1,这里只需要 <<+ 两种操作就够了。

class Solution {
public:
    int multiply(int A, int B) {
        int result = 0;
        int i = 0;
        while(B){
            if(B & 1){
                result += A << i;
            }
            B >>= 1;
            i++;
        }
        return result;
    }
};