/*
* 寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。
* 思路:不能使用四則運算,就只剩下位運算了。例如17+5
* 17轉化成二進制10001,5轉化成二進制0101。
* 首先不考慮進位,則1+1=0,1+0=1,0+1=1,0+0=0
* 可以看出這是位^運算(異或),這一步的結果是10100.
*
* 接下來考慮是否產生進位,則1+1=1,0+1=0,1+0=0,0+0=0
* 可以看出這是位&運算(與),這一步的結果是00001,
* 考慮進位要加在前面一位上,所以將結果左移00010
*
* 最後10100^00010=10110,轉化爲十進制爲22
* 注:與&、非~、或|、異或^
*/
public class Add {
public int add(int num1,int num2) {
while(num2 != 0) { //迭代終止條件:進位爲0
//不考慮進位
int temp1 = num1 ^ num2;
//獲取進位
int temp2 = (num1 & num2) << 1;
num1 = temp1;
num2 = temp2;
}
return num1;
}
public static void main(String[] args) {
System.out.println(new Add().add(5, 17));
}
}
《劍指offer》-求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.