簡體   English   中英

在不使用第三個變量的情況下交換兩個整數

[英]Swap two integers without using a third variable

我有一個賦值,我需要在不使用第三個變量的情況下交換兩個整數。 我不知道該怎么做。 我該如何編碼呢?

是的,這是可能的:

Dim var1 = 1
Dim var2 = 2
var1 = var1 + var2
var2 = var1 - var2
var1 = var1 - var2

但你為什么需要呢? 代碼變得深奧。

讓我們假設

a = 10; 
b = 20; 

a = a + b; // a = 30

b = a - b; // b = 10
a = a - b; // a = 20

交換價值。

閱讀“ xor交換算法”

你可以在這里找到答案:

http://www.java2s.com/Tutorial/VB/0040__Data-Type/Swaptwointegerswithoutusingathird.htm

firstValue = firstValue Xor secondValue
secondValue = firstValue Xor secondValue
firstValue = firstValue Xor secondValue
 Dim a As Integer
 Dim b As Integer
 a= 1
 b= 2

 a = a Xor b
 b = a Xor b
 a = a Xor b

要交換兩個數字變量,請執行此操作

a = a + b;
b = a - b;
a = a - b;

要么

a = a xor b;
b = a xor b;
a = a xor b;

其中a和b是要交換的變量

理論上有3種方式

a = 4 , b = 5

1.使用XOR

a = a XOR b = 4 XOR 5 = 9     
b = a XOR b = 9 XOR 5 = 4
a = a XOR b = 9 XOR 4 = 5

2.使用+, -

a = a+b = 4+5 = 9     // should not overflow
b = a-b = 9-5 = 4
a = a-b = 9-4 = 5

3.使用*,/

a = a*b = 4*5 = 20    // should not overflow
b = a/b = 20/5 = 4    // should not overflow and should not be irrational number
a = a/b = 20/4 = 5    // should not overflow and should not be irrational number

上面的Xor或a + b算法是最好的方法,但這只是一種奇怪的方法。 仍然不確定你為什么要這樣做。 只需構建一個函數,您可以提供兩個值ByRef並讓它執行標准交換方法。

Dim newList as New List(Of Integer)
newList.Add firstvalue
newList.Add secondValue
newList.Reverse
secondValue = newList.Item(0)
firstValue = newList.Item(1)
    Take two text boxes and a command box.In command box type this code.  
    text1.text=val(text1.text) + val(text2.text)      
    text2.text=val(text1.text) - val(text2.text)  
    text1.text=val(text1.text) - val(text2.text)

檢查為您編寫的鏈接

方法一。

加法和減法

Integer a, b
read a and b
a= a+b;
b=a-b;
a=a-b;

問題:

當數字總和超過整數范圍時,結果不正確。

方法2。

乘法和除法

Integer a, b
read a and b
a=a*b;
b=a/b;
a=a/b;

問題:

  1. 如果a * b的值超出整數范圍。
  2. 如果a或b的值為零,那么它將給出錯誤的結果。

方法3。

異或方法

Integer a , b
read a and b
a=a^b;
b=a^b;
a=a^b;

解決這個問題的最佳方法,沒有任何陷阱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM