比如給你兩個數,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 其實我們看加減法更...