leetcode刷題系列:不用加號實現a+b

題目描述:實現a+b,但是不用加號

解析:

a和b的異或運算被稱作沒有進位的加法運算。其實可以想象,如果1和1想加 結果爲0進位爲1  0和0相加 還是0 1和0相加 還有0和1相加都是一  剛好符合異或運算的規則,然後現在要解決的就是進位問題,進位可以通過與運算來解決,與運算後的結果如果左移一位,剛好是進位後的結果,此時用這兩個結果再做一次上面描述的過程,那麼直到進位爲0的時候,就是最終的結果了,下面是代碼

int add(int a,int b)
{
    int sum;
    int carry ;
    while(b != 0)
    {
         sum = a ^ b; 
         carry = (a & b) << 1;
         a = sum;
         b = carry;
     }
     return a;
}


發佈了119 篇原創文章 · 獲贊 17 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章