數學分析法:
1 #include2intmain()
3
我們知道兩個加數,一定可以交換它們的值。a+b求得它們的和,比如為sum,但我們完全可以不再定義乙個變數sum,而賦值給a或者b都是可以的,為什麼呢?因為知道兩個數的和,以及其中乙個加數,一定可以得到另乙個數。所以就算先覆蓋乙個加數也是無所謂的。得到a+b的和賦值給a之後,要把a和b交換,只用將a(sum)減去b,此時減出來的結果相當於最初的a(10),賦值給b了。道理很簡單,a+b=sum;那麼一定有sum-b=a。6-7行之後,a還是sum,b已經是之前的a了,最後就該把最初的b賦值給a了,已經很簡單,和與加數知道兩個即可,此時a(sum=30)-b(此時已經是a了,b=10),要交換,只用把a(sum=30)-b(10)賦值給a,這樣就達到兩個變數交換的目的了。
為了鍛鍊思維,可把上面第6行變成:b=a+b;那麼後面該怎麼寫?如果理解了的話應該是不困難的。
eg:b = a + b;
a = b - a;
b = b - a;
但是這樣的方法有一點不好,就是可能會有溢位,萬一兩個int相加大於最大的數了,這個方法就失效了。
所以,需要另外一種方法:
異或:相同為0,不同為1.即1^1=0;1^0=1。x^0=x,a^b=b^a,a^b^c=(a^b)^c=a^(b^c).
1 #include2intmain()
3
只用將上面的減號變成異或(^)就可以實現交換,上訴**其實是第一種方式的翻版。
但通過彙編**發現,少乙個變數,並不意味著更快。這個方式,只是為了可能的面試題。實際開發中,還是用三個變數轉換的更好。
交換兩個變數
目的 實現兩個變數值的交換 以int 型別為例 方法一 使用臨時變數。優點 安全,適合任何型別資料交換,無溢位風險。缺點 保守 效率不高,需要使用第三方臨時變數 棧空間 1 void swap value int var1,int var2 2 方法二 利用 算術運算實現。優點 不需要額外的臨時變數...
swap交換兩個變數
最簡單的交換兩個變數值是用指標。void swap int a,int b work 這裡有個問題,一定要想清楚。為什麼在函式體內不能交換指標了?變成這樣 void swap int a,int b will not work在swap函式裡,a and b 都會產生乙個copy來,那你tmp a ...
交換兩個變數方法
將兩個變數的值互換,相當簡單的問題。假設有變數a b int a int b 方法1 將a b的值互換,為 int tmp a a b b tmp 然而,如果要求不用中間變數,就交換變數的值,該怎麼做呢?乙個比較有效率且眾所周知的方法就是 方法2 三次異或操作 int a 10,b 12 a 101...