zoukankan      html  css  js  c++  java
  • LeetCode 371两数之和

    题目描述:

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

    思路:

    既然不能使用运算符操作就要考虑到,位运算的加法。

    加法有进位的时候和不进位的时候。

    位运算既是0 和 1,

    0+0=0;0+1=1;1+0=1;1+1=0(需要进位);

    这不就是 异或操作嘛,相同为0,不同为1 例如:5+4

      0101

    +0100

    =1001(9)

    这时,我们发现异或只能判断到最高位以下,我们需要获取到进位的数的位置,当遇到两个1就进位,所以进行 “与” 运算,再左移1位就是进位。当遇到最高位是 0 时,就可以直接返回,(这时已经不用再进位了)

    代码如下:

     public int getSum(int a,int b){
            while(b!=0){//直到进位是0 结束循环
                int j = a ^ b;//异或 取非进位的值 (异或,相同位为0,不同位是1)
                int s = (a & b) << 1;//先 与 获取进位后的一位数,再左移一位,相当于进位 (与,全真才真,有假则假)
                a = j;
                b = s;
            }
    
            return a;
    
        }
  • 相关阅读:
    第十四周学习进度
    团队十日冲刺17
    团队十日冲刺16
    找水王
    搜狗输入法评价
    团队十日冲刺15
    团队十日冲刺14
    团队十日冲刺13
    团队十日冲刺12
    团队十日冲刺11
  • 原文地址:https://www.cnblogs.com/itjiangpo/p/14181467.html
Copyright © 2011-2022 走看看