在CU看到的帖子,写了一个程序。
使用C语言写出以下函数,给你三个变量a,b,c,请不使用其他变量的情况下交换他们的值,使得a=b, b=c, c=a;
原帖地址:
http://bbs.chinaunix.net/viewthread.php?tid=883665&extra=page%3D1%26filter%3Ddigest
此程序有问题,待修改
还有人的解决方法:
c = (a+c)-(a=b,b=c);
a ^= b ^= c ^= a ^= b ^= c ^= a ^= b;
狠啊狠
没去测试,以后有空的话细看。
使用C语言写出以下函数,给你三个变量a,b,c,请不使用其他变量的情况下交换他们的值,使得a=b, b=c, c=a;
原帖地址:
http://bbs.chinaunix.net/viewthread.php?tid=883665&extra=page%3D1%26filter%3Ddigest
此程序有问题,待修改
#include
<
stdio.h
>
void swapp( int a, int b, int c)
{
a=a+b; //没有考虑到a溢出
b=a-b;
a=a-b;
b=b+c;
c=b-c;
b=b-c;
}
void main()
{
int a = 1;
int b = 2;
int c = 3;
swapp(a,b,c); //mk a=b,b=c,c=a
printf("a = %d,b = %d,c = %d ");
}
void swapp( int a, int b, int c)
{
a=a+b; //没有考虑到a溢出
b=a-b;
a=a-b;
b=b+c;
c=b-c;
b=b-c;
}
void main()
{
int a = 1;
int b = 2;
int c = 3;
swapp(a,b,c); //mk a=b,b=c,c=a
printf("a = %d,b = %d,c = %d ");
}
还有人的解决方法:
c = (a+c)-(a=b,b=c);
a ^= b ^= c ^= a ^= b ^= c ^= a ^= b;
狠啊狠
__asm
{
push a;
push b;
push c;
pop b;
pop a;
pop c;
}
{
push a;
push b;
push c;
pop b;
pop a;
pop c;
}
没去测试,以后有空的话细看。