《劍指offer》-求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號

/*
 * 寫一個函數,求兩個整數之和,要求在函數體內不得使用+、-、*、/四則運算符號。
 * 思路:不能使用四則運算,就只剩下位運算了。例如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));
	}
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章