码迷,mamicode.com
首页 > 编程语言 > 详细

算法code-01

时间:2020-05-26 12:33:58      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:public   代码   结果   思路   运算   就是   pre   相加   sum   

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

标签:public   代码   结果   思路   运算   就是   pre   相加   sum   

原文地址:https://www.cnblogs.com/xiaohuia/p/12964555.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!