知识点

位运算

思路

要求实现无加减乘除运算的乘法; 我们可以将一个乘数按位拆解,这样就可以用位运算得到1,2,4,8..倍的数值

之后我们实现无需加减乘除的加法即可

AC Code(C++)

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param n int整型 
     * @param a int整型 
     * @return int整型
     */
    int multiply(int n, int a) {
        if (!n or !a) return 0;
        int res = 0;
        // 对a二进制分解
        for (int i = 0; i < 32 and a > 0; i ++) {
            if (a >> i & 1) {
                res = sum(res, n << i);
                a -= (1 << i);
            } 
        }
        return res;
    }
    int sum(int a, int b) {
        if(b == 0) return a;
        return sum(a ^ b , (unsigned int)(a & b) << 1);
    }
};