不使用第三个变量的交换两个数 (笔记)
[cpp]typedef int SWAP_TYPE;
//交换两个数,不使用第三个变量
void swap(int &a,int &b,SWAP_TYPE type)
{
switch(type)
{
case 1:
//利用加减法(缺点:a+b可能溢出)
a = a + b;
b = a - b;
a = a - b;
break;
case 2:
//利用一个数异或本身等于0和异或运算符合交换率
a = a ^ b;
b = a ^ b;
a = a ^ b;
break;
case 3:
//乘除
a = a * b;
b = a / b;
a = a / b;
break;
case 4:
//不常见方法1
a = a + b - (b = a);
break;
case 5:
//不常见方法2
b = a + (a = b)*0;
break;
default:
break;
}
}[/cpp]
作者:JarvisChu
原文链接:不使用第三个变量的交换两个数 (笔记)
版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
2 条评论
对于case1, 如果你交换同一个变量, 比如swap(i, i, 1), i就变成0了
@Txcig 是的,case1和case2都有这种问题。case 3 4 5正常