天天看點

[劍指offer] 不用加減乘除做加法

本文首發于我的個人部落格: 尾尾部落

題目描述

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

解題思路

用位運算來實作。

  • step1: 進行異或運算,計算兩個數各個位置上的相加,不考慮進位;
  • step2: 進行位與運算,然後左移一位,計算進位值;
  • step3: 把異或運算的結果賦給 num1,把進位值賦給 num2,依此循環,進位值為空的時候結束循環,num1就是兩數之和。

參考代碼

public class Solution {
    public int Add(int num1, int num2) {
        if(num2 == 0)
            return num1;
        int sum = 0, carry = 0;
        while(num2 != 0){
            sum = num1 ^ num2;
            carry = (num1 & num2) << 1;
            num1 = sum;
            num2 = carry;
        }
        return num1;
    }
}
           

繼續閱讀