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

題目:

劍指 Offer 65. 不用加減乘除做加法
在這裏插入圖片描述

題解:

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

代碼:

1. 代碼一:迭代

public class 面試題65 {

    // 方法1:迭代
    public static int add(int a, int b) {
        int sum; // 無進位和
        int carry; // 進位值
        while(b != 0) // 當進位爲 0 時跳出
        {
            sum = a ^ b; // 異或操作得無進位和
            carry = (a & b) << 1; // 與操作後,左移一位得進位值
            // 循環,直到進位爲0
            a = sum;
            b = carry;
        }
        return a;
    }

    public static void main(String[] args) {
        int a = 20, b = 17;
        int res = add(a, b);
        System.out.println(res);
    }
}

2. 代碼二:遞歸

public class 面試題65 {

    // 方法2:遞歸
    public static int add(int a, int b) {
        if(b == 0)
        {
            return a;
        }
        if(a == 0)
        {
            return b;
        }
        int plus1 = a ^ b; // 計算無進位和(不計進位). 相同位置0,相反位置1
        int plus2 = (a & b) << 1; // 計算進位. 先保留同爲1的位,都爲1的位要向左進位,因此左移1位
        return add(plus1, plus2);
    }

    public static void main(String[] args) {
        int a = 20, b = 17;
        int res = add(a, b);
        System.out.println(res);
    }
}

參考:

  1. 面試題65. 不用加減乘除做加法(位運算,清晰圖解)
  2. 【二進制求和】超詳細推導公式,打敗100.00%用戶
  3. 禁止套娃,如何用位運算完成加法?
  4. 位運算_面試題65. 不用加減乘除做加法
  5. 【每日算法Day 66】經典面試題:不用四則運算如何做加法?
  6. 按位異或和按位與運算
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章