文章出處

弱菜刷題還是刷中文題好了,沒必要和英文過不去,現在的重點是基本代碼能力的恢復。

【題目】
劍指offer

寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。

【思路】
直覺想到用二進制的位運算。最后寫出來是一個迭代的過程。
每次迭代先計算x和y的和但不處理進位,那么相當于做異或,得到res1
然后處理進位問題,相當于計算與運算,得到res2
那么res2左移1位,再加到res1上,則整個運算的最終結果轉化為res1+(res2<<1)
因為res2做左移,總會減小到0,那時候的res1就是最終結果

class Solution{
public:
    int Add(int x, int y){
        int sum;
        int carry;

        while (true){
            sum = x^y;
            carry = (x&y) << 1;
            y = carry;
            x = sum;
            if (y == 0){
                break;
            }
        }
        return sum;
    }
};

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()