不用輔助變數交換兩個整數的值。真的很簡單嗎?

2021-06-25 13:37:24 字數 526 閱讀 1758

比如給你兩個數,a和b,讓你交換他們兩個數的值。

你可能會這樣做:

sum=a+b;

a=sum-b;

b=sum-a;

這樣真的對嗎?

如果a和b的最大值為65536,a = 40000,b=40000,這樣sum=80000嗎?顯然資料溢位了,sum的值就出錯了。 

這種方法僅限於沒有溢位的情況下。

還可以這樣做:

int c=a;

a=b;

b=c;

延伸:如果不能使用輔助變數呢?

你可能會這樣:

a=a^b;

b=a^b;

a=a^b;

這下你認為肯定對,不會有溢位。

的確,這不會溢位,但如果a、b指向同乙個數呢?

如int c=5;

int &a=c;

int &b=c;

結果是c變為0了。

改進:if(a!=b)

a=a^b;

b=a^b;

a=a^b;

不用額外變數交換兩個整數的值

題目 如何不用任何額外變數交換兩個整數的值 基本思路 如果給定整數a和b使用如下三行 即可交換a和b的值 a a b b a b a a b 如何理解這三行 的具體功能呢?首先要理解關於異或運算的特點 假設a異或b的結果為c,c就是a整數字資訊和b整數字資訊的所有不同的資訊。比如 a 4 100,b...

不用額外變數交換兩個整數的值

不用額外變數交換兩個整數的值 不用額外變數交換兩個整數的值。輸入描述 輸入一行,包含兩個整數n和m 1 09 n m 1 09 10 9 leq n,m leq 10 9 109 n,m 109 輸出描述 輸出交換後的n和m的值。示例1輸入2 3輸出3 2備註 時間複雜度o 1 o 1 o 1 額外...

不用臨時變數,交換兩個變數的值

在學習c語言的時候,涉及到兩個變數值的交換,其中用到臨時變數。類似於 temp a a b b temp 這樣的語句,如果在沒有臨時變數的情況下,該如何做呢?網路上的人們給出了兩種方法 一 異或法 a a b b b a a a b 二 加減法 a a b b a b a a b 其實我們看加減法更...