David
发布于 2014-07-18 / 6 阅读 / 0 评论 / 0 点赞

C# 多种方法实现交换两个整型变量的值

N个星期前面试的时候遇到过这样的试题: 在不适用第三个变量的情况下,交换a与b的值,a=10,b=20; 当时我用加减法做了出来,回来谷歌了一下,原来还有其他方法。
/*定义两个int类型变量a, b, 分别赋值为 a = 10 , b = 20
有多少种算法使得变量 a b 交换数值, 即令 a = 20 b = 10。
*/
// 方法一, 常规方法,设置第三方临时变量
int a = 10;
int b = 20;
int temp;   //设计第三方临时变量
temp = a;
a = b;
b = temp;
Console.WriteLine("方法一:取第三方临时变量");
Console.WriteLine("a = {0},b = {1}", a, b);
Console.ReadKey();
            
// 方法二  加减法
a = 10;   //重新赋值
b = 20;   //重新赋值
a = a + b;  //此条语句使得 a = 10 + 20;
b = a - b;  //此条语句使得 b = 30 - 20 = 10;
a = a - b;  //此条语句使得 a = 30 - 10 = 20;
Console.WriteLine("方法二:加减法");
Console.WriteLine("a = {0},b = {1}", a, b);
Console.ReadKey();
//  方法三 乘除法 (要求 b 不能为0) 此方法与加减法类似,但要求b不能为零
a = 10;
b = 20;
a = a * b; // a = 200
b = a / b; // b = 10
a = a / b; // a = 20
Console.WriteLine("方法三:乘除法");
Console.WriteLine("a = {0},b = {1}", a, b);
Console.ReadKey();
// 方法四   异 或 法  我认为此算法和前两种理论上是一样的 只是变为位运算而已
a = 10;  //a的二进制表示 001010
b = 20;  //b的二进制表示 010100
a = a ^ b; //a 的二进制表示 100001
b = a ^ b; //b 的二进制表示 001010
a = a ^ b; //a 的二进制表示 010100
Console.WriteLine("方法四:异或位运算方法");
Console.WriteLine("a = {0},b = {1}", a, b);
Console.ReadKey();
这异或的运算模式看了这实例我才明白是怎么回事,以前老师讲课的时候好像不是这么回事..............