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

2021-09-26 03:28:35 字數 511 閱讀 7677

題目

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

基本思路

如果給定整數a和b使用如下三行**即可交換a和b的值:

a = a ^ b

b = a ^ b

a = a ^ b

如何理解這三行**的具體功能呢?首先要理解關於異或運算的特點:

假設a異或b的結果為c,c就是a整數字資訊和b整數字資訊的所有不同的資訊。比如:a= 4 = 100, b = 3 = 011, a ^ b = 111.

a ^ c的結果就是b。比如:a = 4 = 100, c = 111, a ^ c = 011 = 3 = b

b ^ c的結果就是a。比如:b = 3 = 011, c = 111, b ^ c = 100 = 4 = a

再看上述**,第一行的計算結果實際上就是c;第二行用第一行的結果異或b,就是相當於c ^ b,所以結果就是a,把這個值賦給b;第三行再用第一行的結果異或b,但此時b已經是a了,所以相當於c ^ a,結果為b賦給a,此時a和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 其實我們看加減法更...

不用引入第三變數交換兩個變數的值

前幾天發現了乙個問題 有人告訴我,要進行變數交換,就必須引入第三變數!假設我們要交換a和b變數的值,如果寫成 int a 5,b 10 a b b a 那麼結果就是兩個都是10,理由不言而喻。所以就應該引入第三變數,在a的值被覆蓋之前就把a的值保留好。int a 5,b 10,tmp tmp a a...