371:两整数之和

问题描述

不使用运算符 + 和 - ​​​​​​​,计算两整数 ​​​​​​​a 、b ​​​​​​​之和。

示例

输入: a = 1, b = 2
输出: 3
输入: a = -2, b = 3
输出: 1

思路

这尼玛不是强人所难?算加法不让用加号?
只能用位运算了。
异或运算是相异为一,相同为0,可以用来表示两个数相加无进位的情况。
与运算,两个1才能为1. 把与运算的结果左移一位就可以模拟出进位情况。
把无进位情况和进位情况继续异或、与处理, 直到无进位时,异或运算的结果即为所求。

AC代码

Java版

class Solution {
    public int getSum(int a, int b) {
        int res = 0;
        while(true){
            res = a^b;
            if((a&b) == 0){
                return res;
            }
            int jinwei = (a&b)<<1;
            a = a^b;
            b = jinwei;
        }
    }
}

有人说我写的不够优雅:

class Solution {
    public int getSum(int a, int b) {
        do{
            int res = a^b;
            int jinwei = (a&b)<<1;
            a = res; b = jinwei;
        }while(b != 0);
        return a;
    }
}
发布了396 篇原创文章 · 获赞 22 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_41687289/article/details/104911190
今日推荐