算法code-01

Posted xiaohuia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法code-01相关的知识,希望对你有一定的参考价值。

A+B Problem

题目:使用位运算求a和b的和,两个整数a和b,其中0<=a,b<=100。

分析:a+b=a^b+(a&b)<<1

其中a^b为异或运算,本质上可以看作不进位加法;后面的a&b为与运算,相同位上都为1则结果才为1,其它情况则结果为0,我们只需要将与运算左移一位,则可以看成是进位运算。所以,两者结合就是完成的加法运算。

由于题目中要求只用位运算求和,由于a+b和(a&b)<<1也是两数相加,而且a+0=a,所以我们可以将上述思路最后的“两者结合”用递归或循环的方式完成。直到递归或循环到b=0,这时return a;即可。

代码:

//递归实现
public class Solution01 {
    public int sum(int a,int b){
        if (b == 0){
            return a;
        }
        int sum = a ^ b;
        int carry = (a & b) << 1;
        return sum(sum,carry);
    }
}
//循环实现
public class Solution02 {
    int sum(int a,int b){
        int sum = 0,carry = 0;
        while (b!=0){
            sum = a^b;
            carry = (a&b)<<1;
            a = sum;
            b = carry;
        }
        return a;
    }
}

以上是关于算法code-01的主要内容,如果未能解决你的问题,请参考以下文章

片段(Java) | 机试题+算法思路+考点+代码解析 2023

算法code-01

算法code-01

如何标记从卷积神经网络的分割算法生成的图像片段?

从搜索文档中查找最小片段的算法?

C语言100个经典算法源码片段