劍指offer23

題目描述

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

解題思路分析

一樣的,跟咱們手動算加法同樣函數

  • 先直接將兩個數相加起來,使用位移運算^,如5+17,5的二進制爲101,17的二進制爲10001,使用^運算以後爲10100
  • 接下來計算進位,使用&運算以後並向左移一位,5&17爲01,向左移一位爲10,接下來將前一步^計算獲得的值一直重複這兩不下去,直到進位爲0則結束

代碼實現

public int add(int num1, int num2) {
    int sum, carry;
    do {
        sum = num1 ^ num2;//計算第一步^
        carry = (num1 & num2) << 1;//計算進位
        num1 = sum;
        num2 = carry;
    } while (num2 != 0);//進位爲0時結束
    return num1;
}
複製代碼
相關文章
相關標籤/搜索