實現一個add()函式-兩數相加(不能使用四則運算以及++--)
阿新 • • 發佈:2019-01-05
當我們被問到這個問題時,都在想既然是兩數相加,那必然要使用到四則運算或者自增自減。
如果不用四則運算,那我們就要想想十進位制數之間是怎麼進行加法的。比如要計算14+7=21。我們可以通過三步來計算,(1)個位上進行加法計算得出4+7=11 (不進位)(2)4+7=11需要進位,進位的值為10 (3) 前兩步相加結果證號為:10+11=21
其實求兩數之和四則運算不能用,那就只剩下位運算了(位運算針對於二進位制數間操作)我們可以用位運算來走上述三步。4的二進位制為0100 ,7的二進位制為0111(1)不進位相加:0100+0111=0011 (第三位兩數都為1,相加結果為二進位制1000,但不進位所以為0)(2)進位值為1000 (3)前兩步相加1000+0011轉換成十進位制為11,所以上述三步也符合二進位制數相加。
所以我們可以用位運算來替換二進位制間加法。(1)0+1、1+0結果為1,0+0、1+1結果為0,這和異或(^)操作的結果一樣(2)0+1、1+0、0+0都不會產生進位,只有1+1會產生進位,所以我們可以通過位運算中的按位與(&)來判斷是否需要進位,進位完成後只要向左移動一位就行 (3)前兩步相加 ps:若該數中需要進位的不止一處,則可以不斷重複(1)(2)步驟,直到不再產生進位。
具體實現如下:
int add(int x,int y) { int sum; int count; while(y != 0) { sum=x^y; count=(x&y)<<1; x=sum; y=count; } return x; } int main() { int i,j,num; cin>>i>>j; num=add(i,j); cout<<num<<endl; system("pause"); return 0; }