【Java】 劍指offer(65) 不用加減乘除作加法

 

本文參考自《劍指offer》一書,代碼採用Java語言。html

更多:《劍指Offer》Java實現合集  java

題目

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

思路

  對數字作運算,除了四則運算外,只剩下位運算了。根據通常狀況下的加法步驟,設計以下:post

  1)不考慮進位對每一位相加:1加0,0加1都等於1,而0加0,1加1等於0,因此使用異或^操做;測試

  2)計算進位:只有1加1產生進位,因此採用位與&操做,再左移1位;url

  3)將和與進位相加,即重複前兩步操做。結束判斷爲進位爲0。設計

 測試代碼htm

  1.正負零blog

Java代碼

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

public class AddTwoNumbers {
    public int add(int num1,int num2) {
        while(num2!=0){
            int sum=num1^num2;  //沒進位的和
            int carry=(num1&num2)<<1;  //進位
            num1=sum;
            num2=carry;
        }
        return num1;
    }
}

  

收穫

  1.熟悉位操做的特性。二進制位運算的幾個用法get

  2.記住如何用位操做來進行數字的加減。

 

更多:《劍指Offer》Java實現合集 

相關文章
相關標籤/搜索