目錄
•寫在前面
•利用新變數
•利用加減法
•利用乘除法
•利用異或
•利用移位
交換兩個數?聽起來這不是很簡單嘛,感覺沒什麼好講的。不過這麼想是因為很多時候都想簡單了,沒有把程式設計的巧妙使用到極致,那麼接下來我們來看看,交換兩個數這麼簡單的問題,怎麼玩出不一樣的花出來,哈哈哈。
這種方法是非常非常基本的一種方式,直接利用乙個新的變數作為中介,交換兩個數。
temp = a;
a = b;
b = temp;
使用加減法來進行交換,這種方法實際上就是先把a+b的結果暫時先儲存在變數a中,然後通過這改變後的a和原始的b進行減法就可以得到交換後的b,不過要注意了,使用這種方法有乙個不好的地方,就是a和b都是int型別,a+b的結果可以越界。
a = a + b;
b = a - b;
a = a - b;
這個方法其實和加減法是乙個道理,都是先將兩個數的結合,儲存在其中乙個數中,然後通過分離得到兩個數。乘除法就是,先將兩個數相乘儲存在a中,然後除出來,也很巧妙。一樣的,這個方法比加減法更容易越界。
a = a * b;
b = a / b;
a = a / b;
使用異或的這個方法可以說非常適合計算機計算,計算速度也是非常快的,一般swap函式的底層實現會使用這種方式進行。畢竟計算機是二進位制的世界,學會利用二進位制,簡直帥的不行。而且這種方式避免了越界問題,哈哈哈。
a = a ^ b;
b = a ^ b;
a = a ^ b;
移位的方法也是使用二進位制來完成,不過這種方法收到了位數的限制,比如在32位的機子中計算,int拆成高16位和低16位進行計算,相當於多了16位的暫存空間可以周轉,但是此方法的缺陷也顯而易見,就是如果被賦值的a或者b超過了16位,這種方法就會發生錯誤。
a <<= 16;
a |= b;
b = a >> 16;
a = a & 0xffff;
兩個數的交換
一般思路 建立乙個臨時變數,以這個臨時變數為中間變數,利用賦值來完成兩個數的內容的相互交換。如下 include int main 優化方案 1.上述方法中需要另外建立乙個變數,略微有些麻煩,若是要求不能建立臨時變數,則可以採用數學上的加法來進行一些變通。如下 include int main 2....
交換兩個數的方法
示例 如下 1 include 2 using namespace std 34 5 指標法 中間變數1 6 7void swap1 int pa,int pb 813 14 15 引用法 中間變數2 16 17void swap2 int ra,int rb 1823 24 25 相互加減法 26...
交換兩個數的值
include iostream.h 解法二 include iostream.h void swap int x,int y void swap int x,int y void main void main 請同學們想一下,哪乙個能實現數值交換!我來告訴大家,解法可以實現這個功能!解法一 他把a...