例:x = 4;y = 5。如何在不引入第三個變數的情況下互換x與y的值?
第一種方法是加法。
x = x + y;
y = x - y;
x = x - y;
這個方案的缺陷在於,當x或者y足夠大的時候,可能產生溢位。
第二種方法,把加法變為減法,與方案一類似。
x = x - y;
y = x + y;
x = y - x;
當然,改換成乘法和除法也可以解決以上問題。但是算術運算要特別注意兩個問題:
溢位問題:在運算過程中可能會產生溢位現象,加法和乘法的產生溢位概率大於減法和除法。
精度問題:當交換小數的時候,使用算術運算會產生計算精度問題。例:
如果真正的在實踐中實現這種功能,還需要加一些特殊判斷,比如兩個值相等該如何處理,兩個值可能會溢位該如何處理(try…catch…)。
異或位運算(變成二進位制之後進行異或運算),不太好理解。可以參考這篇文章按位異或運算子^.
x ^= y;
y ^= x;
x ^= y;
這個解法是最簡單的方法,也不會產生溢位問題:直接運用解構手法,交換x和y的位置。
[x, y]
=[y, x]
;
而這個方法更厲害的地方在於,它不僅僅可以用來交換數值(number),也可以用來交換其他任意型別資料。 不引入第三個變數交換兩個整型數
今天又遇到了我剛接觸程式設計就遇到的乙個問題 交換兩個整型數,分別在引入第三個變數和不引入第三個變數的情況下完成。引入第三個變數,其實是經典的交換演算法,說它經典,是因為它適合任何情況,這裡不對此方法進行論述。這個是我大一時候做的一道課後題,當時不明白,就找了一下度娘,然後硬著頭皮看懂了,然後就交了...
交換兩個變數的值,不使用第三個變數
通常我們的做法是 尤其是在學習階段 定義乙個新的變數,借助它完成交換。如下 int a,b a 10 b 15 int t t a a b b t 這種演算法易於理解,特別適合幫助初學者了解電腦程式的特點,是賦值語句的經典應用。在實際軟體開發當中,此演算法簡單明瞭,不會產生歧義,便於程式設計師之間的...
不借助第三個變數交換兩個變數的值
通常我們的做法是 尤其是在學習階段 定義乙個新的變數,借助它完成交換。如下 int a,b a 10 b 15 int t t a a b b t 這種演算法易於理解,特別適合幫助初學者了解電腦程式的特點,是賦值語句的經典應用。在實際軟體開發當中,此演算法簡單明瞭,不會產生歧義,便於程式設計師之間的...