算法通关村--位移的加减乘除

在计算机中,位运算的效率比乘除效率更高,因此在高性能软件的源码中大量应用,并且计算机中各种运算本质上都是位运算。

位运算实现加法

LeetCode371:

给你两个整数a和b,不使用运算符+和-,计算并返回两整数之和。

示例1:

输入:a = 1,b =2

输入:3

示例2:

输入:a = 2,b = 3

输出:5

思路:

若a、b两个数不发生进位的情况就是a和b不同时为1,即a⊕b,当a、b发生进位时,即a和b两个数都为1时,发生进位,并且由1变成10。

public static int getSum(int a,int b){
        //循环,当进位为0时,结束循环
        while (b != 0){
            int c = (a & b) << 1;//进位
            a = a ^ b;//a = 非进位
            b = c;// b = 进位
        }
        return a;
    }

递归乘法

LeetCode面试题08.05.递归乘法:

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

示例1:

输入:A = 1,B = 10

输出:10

示例2:

输入:A = 3,B = 4

输出:12

public static int multiply(int a,int b){
        //若其中一个数为0,结果为0
        if (a == 0 || b == 0){
            return 0;
        }
        //a为1,返回b
        if (a == 1){
            return b;
        }
        //b为1,返回a
        if (b == 1){
            return a;
        }
        return multiply(a,b-1)+a;
    }

你可能感兴趣的:(算法,数据结构)