9

我有一个任务,我需要在不使用第三个变量的情况下交换两个整数。我不知道该怎么做。我将如何编码?

4

9 回答 9

19

是的,有可能:

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

但是你为什么需要它?代码变得深奥。

于 2012-04-27T11:58:19.190 回答
7

让我们假设

a = 10; 
b = 20; 

a = a + b; // a = 30

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

值交换。

于 2012-04-27T11:56:53.960 回答
5

阅读“异或交换算法”。

你可以在这里找到答案:

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

firstValue = firstValue Xor secondValue
secondValue = firstValue Xor secondValue
firstValue = firstValue Xor secondValue
于 2012-04-27T11:57:59.067 回答
3
 Dim a As Integer
 Dim b As Integer
 a= 1
 b= 2

 a = a Xor b
 b = a Xor b
 a = a Xor b
于 2012-04-27T12:04:09.720 回答
2

要交换两个数值变量,请这样做

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

或者

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

其中 a 和 b 是要交换的变量

于 2012-04-27T11:57:59.283 回答
1

理论上3种方式

a = 4 , b = 5

1. 使用异或

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
于 2014-12-18T18:13:35.420 回答
0

上面的 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)
于 2012-04-27T12:31:58.357 回答
0
    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)
于 2014-08-06T23:54:11.340 回答
0

检查为您编写的链接

方法#1。

加减法

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;

解决这个问题的最佳方法,没有任何陷阱。

于 2016-02-27T03:07:53.697 回答