1. 程式人生 > >例項4:發散思維能力——不用加減乘除做加法

例項4:發散思維能力——不用加減乘除做加法

問題描述寫一個函式,求兩個整數之和,要求在函式體內不得使用+、-、*、/四則運算子號。

知識拓展:&:與(x&y)兩二進位制上下比較只有位值都為1時才取1,否則取0。
例如:14&15  (14  二進位制  1110,15 二進位制   1111   ——&與的結果 :1110  ---->結果14)
|:或(x|y)兩二進位制上下比較只有位值都為0時才取0,否則取1。
例如:14|15  (14  二進位制  1110,15 二進位制     1111  ——|或的結果:1111 ---->結果15)
^:異或(x^y)兩二進位制上下比較只有位不相等時才取1,否則取零。
例如:14^15  (14  二進位制  1110,15 二進位制   1111   ——^異或的結果:0001 ---->結果1)

問題分析:第一感覺使用二進位制的位運算。最後寫出來是一個迭代的過程。每次迭代先計算x和y的和但不處理進位,那麼相當於做異或,得到res1;然後處理進位問題,相當於計算與運算,得到res2;那麼res2左移1位,再加到res1上,則整個運算的最終結果轉化為res1+(res2<<1);因為res2做左移,總會減小到0,那時候的res1就是最終結果。

程式碼實現:

public class Solution {
	public int Add(int num1,int num2) {
        int sum,mark;
	    do{
	        sum = num1^num2;
	        mark = (num1&num2)<<1;
	        num1=sum;
	        num2=mark;
	    }while(num2!=0);
	    return num1;
    }
	
	public static void main(String[] args) {
		Solution solution = new Solution();
		int sum = solution.Add(5, 7);
		System.out.println(sum);
	}
}

執行結果:

12