不使用中間變數交換兩數

2021-07-12 06:52:54 字數 1148 閱讀 1368

交換兩個數的值是比較基礎也比較常用的演算法,比如在氣泡排序法中,從第一數開始比較,如後乙個數比其小則交換兩數的值。

一般在交換兩數的值是,最簡單的方法適用的方法就是用中間變數暫存乙個數。例如,要交換a,b的值,可使用中間變數c暫存其中的乙個數。

核心**如下:

c=b;

b=a;

a=b;

當然也可以不使用中間變數的方法,如以下幾種方法。

1、加法:

核心**如下:

a=a+b;

b=a-b;

a=a-b;

這種演算法先將a和b的值賦給a,之後b等於a-b,這是b的值就變成了原來的a,最後a=a-b,a的值變為原來的b.

這種方法適用於整形和浮點型的數,但是用於浮點型時可能在減法後,資料可能會出現精度損失。

2、乘法:

核心**如下:

a=a*b;

b=a/b;

a=a/b;

這個方法的基本思想和上一種加法很像,只是這個演算法在b=0時出錯,因為分子不能等於0。

3、異或法:

核心**如下:

a=a^b;

b=a^b;

a=a^b;

關於異或的演算法,簡單說就是兩數相同結果為0,兩數不同結果為1。

- 1、任何數與0異或的結果為它本身。

- 2、兩個相同的數異或的結果為0。

基於以上兩點,上述的**可以變形為:

a=a^b;

b=a^b=a^b^b=a^0=a

;a=a^b=a^b^a=b^0=b;

這樣就和容易理解了,第一步a=a^b;的值沒有意義,這是乙個邏輯運算的值,這只是乙個代換,用於後面兩個語句進行邏輯運算。

不使用中間變數交換兩個數

在交換兩個數的值時,最經常使用的方法是借助於乙個中間變數來進行交換。temp a a b b temp 通過巧妙的加法與減法運算來實現兩個數的交換。a a b b a b a a b 使用位運算 異或 來交換兩個數。a a b b a b a a b 其正確性是因為異或運算滿足 交換律和 結合律。證...

不使用中間變數交換兩個數

在交換兩個數的值時,最經常使用的方法是借助於乙個中間變數來進行交換。temp a a b b temp 通過巧妙的加法與減法運算來實現兩個數的交換。a a b b a b a a b 使用位運算 異或 來交換兩個數。a a b b a b a a b 其正確性是因為異或運算滿足 交換律和 結合律。證...

不使用中間變數交換變數a b變數

這是一道經典題目,很基礎,但是經常考。題目描述 不用任何變數交換a b兩個變數。分析 交換兩個變數的問題在c語言入門書籍中都有所涉及。在講解c語言的函式的時候老師都會告訴我們,實參和形參的問題,下面的函式是不能完成交換兩個變數的 void swap int a,int b int temp temp...