如何不用第三個變數實現兩個數的交換

2022-08-29 18:36:09 字數 521 閱讀 2108

一般我們在寫程式時如果遇到兩個數需要交換時寫作如下:

1

intx,y;23

inttemp;

45 temp=x;x=y;y=temp;

而如果不允許有第三個變數出現即不允許有temp出現時應該如何做呢?可以寫作如下:

1

intx,y;

23 x=x+y;

45 y=x-y;

67 x=x-y;//

上述一般可以滿足,但是有時候x+y或許或出現上溢或者下溢。

而利用兩個數的異或或許更加巧妙——

異或有如下性質:

交換律:x^y=y^x

結合律:x^(y^z)=(x^y)^z

而相同的兩個數異或則使得此數為0,故兩個變數可以如下變換:

1 x=x^y;

23 y=x^y;//

實際意思y=(x^y)^y;

45 x=x^y;//

實際意思x=(x^y)^x;

兩個數字交換不用第三個變數

交換函式 注意 雖然不用第三方變數的寫法感覺很牛,但是在複雜的程式環境中容易出現bug 下面會舉例bug 並且技巧性越強的 bug越不好找 因此只需掌握不用第三個變數的思路,平時最好用第三個變數來交換兩個數字 1.常用,最好理解 用第三方變數協助交換 相當於一瓶可樂,一瓶雪碧交換,用乙個空瓶子實現 ...

php不用第三個變數,交換兩個數的值

字串版本 結合使用substr,strlen兩個方法實現 a a b b echo 交換前 a a.b b.a.b b substr a,0,strlen a strlen b a substr a,strlen b echo 交換後 a a.b b.echo 字串版本 使用str replace方...

如何不使用第三個變數來交換兩個數的值

複試面試老師問了這個問題,當時真的不知道.1 算術運算 簡單來說,就是通過普通的 和 運算來實現。如下 int a,b a 10 b 12 a b a a 2 b 12 b b a a 2 b 10 a b a a 10 b 10 通過以上運算,a和b中的值就進行了交換。表面上看起來很簡單,但是不容...