1. 程式人生 > >[CareerCup] 17.1 Swap Number In Place 互換位置

[CareerCup] 17.1 Swap Number In Place 互換位置

17.1 Write a function to swap a number in place (that is, without temporary variables).

這道題讓我們交換兩個數,但是不能用額外空間,那麼我們可以先做差值,存入a中,然後再加上b,存入b中,那麼此時的b即為原來的a,因為整個相當於做了一個a - b + b的過程,那麼現在b是原來的a,而a中現在儲存的是差值,,那麼原來的b值就可以通過b-a來得到,儲存到a中即可:

解法一:

void swap(int a, int b) {
    a = a - b;
    b = b + a;
    a 
= b - a; cout << a << " " << b << endl; }

下面這種做法跟上面的方法思路相同,但是用到了異或操作符,a異或b求的實際上就是a與b的差值,然後結果再異或b得到a,這就相當於a^b^b,即a^(b^b),由於b^b為0,任何數異或0都為其本身,所以b就成了a,然後a再異或差值就得到了b,完成了交換:

解法二:

void swap(int a, int b) {
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
    cout << a << "
" << b << endl; }