【劍指offer】65. 不用加減乘除作加法

劍指 Offer 65. 不用加減乘除作加法

知識點:數學;位運算函數

題目描述

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

示例
輸入: a = 1, b = 1
輸出: 2

解法一:位運算

不能用四則運算,那其實能夠用的只要邏輯運算和位運算了,這裏很明顯要用位運算。關鍵怎麼用呢。leetcode

咱們列一張表其實就能夠發現,兩個元素若是沒有進位也就是否是對應位都是1的時候,相加就和異或運算的結果是同樣的;若是有進位,也就是兩位上都是1的時候,相加就是二者相與而後左移一位;因此咱們就能夠作了。get

能夠依次獲得兩個數的異或結果和與結果;
sum=a+b=sum+carry;可是求得這兩個後仍是要加,因爲不能用加法,因此能夠再求這兩個結果的與結果和異或結果。直到最後進位的爲0,sum就是答案了。數學

class Solution {
    public int add(int a, int b) {
        int sum = a^b;  //無進位的;
        int carry = (a&b) << 1;  //有進位的;
        while(carry != 0){  //進位爲0的時候返回sum;
            a = sum;
            b = carry;
            sum = a^b;
            carry = (a & b) << 1;
        }
        return sum;   
    }
}

相關連接

不用加減乘除作加法(位運算,清晰圖解)io

相關文章
相關標籤/搜索