两个变量进行互换,但是不用第三个变量
两个变量进行互换,但是不用第三个变量
楼主icesg()2002-10-08 17:07:07 在 C/C++ / C语言 提问现有两个变量,在不用第三个变量的情况下把这两个变量的值进行互换。 问题点数:0、回复次数:31Top
1 楼szbug(深圳虫)回复于 2002-10-08 17:18:59 得分 0
用汇编,通过寄存器。Top
2 楼terron(注定编程一生)回复于 2002-10-08 17:20:08 得分 0
很简单啊
有很多种方法
比如 :
int a = 0, b = 1;
a = b - a;
b = b - a;
a = b + a;Top
3 楼icesg()回复于 2002-10-08 17:21:18 得分 0
是在C++的情况下进行操作的啊!Top
4 楼hellomartin(小白狼)回复于 2002-10-08 17:23:41 得分 0
也可以协汇编Top
5 楼miaoweijun(苗苗)回复于 2002-10-08 17:24:28 得分 0
用两次异或也可以
/^&&^\
--
Top
6 楼anyoshon(好学)回复于 2002-10-08 17:25:45 得分 0
我真的不知道.希望有高手给出办法来.Top
7 楼kbsoft(让世界充满爱!)回复于 2002-10-08 17:25:54 得分 0
void swap(int &a,int &b)
{
a=a^b;
b=b^a;
a=a^b;
}Top
8 楼jyc_nj(老蔣)回复于 2002-10-08 17:26:36 得分 0
是在C++的情况下进行操作的啊!
???
你把文件存成.cpp吧. :)
圣人也要吃喝拉撒啊,C++又不是不能用C的东东.Top
9 楼kbsoft(让世界充满爱!)回复于 2002-10-08 17:29:36 得分 0
void swap(int& a,int& b)
{
a=a+b;
b=a-b;
a=a-b;
}
void swap(int& a,int& b)
{
a=a-b;
b=a+b;
a=b-a;
}
Top
10 楼icesg()回复于 2002-10-08 17:30:25 得分 0
可是这两个变量可能不是int类型啊,可能是字符等等。Top
11 楼blue_coco(椰子)回复于 2002-10-08 17:33:21 得分 0
用汇编的XCHG了。
int a, b;
1》
asm
{
les bx, a;
xchg bx, b;
}
2》
另外用移动位也可以。
如果数是0 - 255之间。
那么定义两个int 型;
int a, b;
a = (a << 8) | b;
b = a >> 8;
a &= 0x00ff;
Top
12 楼baihecheng(百合)回复于 2002-10-08 17:40:42 得分 0
void swap(double& a,double& b)
{
a=a-b;
b=a+b;
a=b-a;
}
Top
13 楼merlinran(天行者)回复于 2002-10-08 17:44:44 得分 0
楼主点明是在C++的情况下,那么分成两种情况:
1、要交换的东西是某种类对象,而且具有swap()成员函数(或者类似的),这不是我异想天开,对于封装了内部表示的大对象,提供交换函数是很好的选择。
2、条件1不符合,但有operator+和operator-,可以用上面提出的方法,但要注意溢出(加或减的结果超出范围)和精确交换(比如浮点数的交换)的问题。Top
14 楼zhpsam109(JACKY.昊昊)回复于 2002-10-08 18:50:13 得分 0
a=a+b;
b=a-b;
a=a-b;Top
15 楼chinalin0(永远的天堂)回复于 2002-10-08 18:55:26 得分 0
用位运算就可。Top
16 楼tanghui21(说话是我的职业)回复于 2002-10-08 19:03:24 得分 0
三次异或Top
17 楼sinusoid(黑眼圈)回复于 2002-10-08 19:13:53 得分 0
void swap(int *a,int *b) /*交换两个数*/
{
*a^=*b;*b^=*a;*a^=*b;
}Top
18 楼AlanLuo_2002(耶罗)回复于 2002-10-08 19:16:52 得分 0
int a(1),b(2);
a=a+b;
b=a-b;
a=a-b;Top
19 楼suntao222(三万英尺)回复于 2002-10-08 19:20:29 得分 0
用磁盘文件操作
先写一个内容A到文件一
再写一个内容B到文件二
读文件一把内容付给二
读文件二把内容伏个一
不管什么是什么变量,是指针也好,是类也好,都可以解决.Top
20 楼zharP(斩铁)回复于 2002-10-08 19:21:36 得分 0
老谭的书上有
用异或……
================================================================
论坛助手 Ver 1.0 B0402提供下载。 改进了很多,功能完备!
★ 浏览帖子速度极快!。 ★ 多种帖子实现界面。
★ 保存帖子到本地★ 监视您关注帖子的回复更新。
★ 可以直接发贴、回复帖子★ 采用XML接口,可以一次性显示4页帖子,同时支持自定义每次显示帖子数量。可以浏览历史记录!
★ 支持在线检测程序升级情况,可及时获得程序更新的信息。
★★ 签名 ●
可以在您的每个帖子的后面自动加上一个自己设计的签名哟。
Http://www.ChinaOK.net/csdn/csdn.zip
Http://www.ChinaOK.net/csdn/csdn.rar
Http://www.ChinaOK.net/csdn/csdn.exe
Top
21 楼leon460(leon460)回复于 2002-10-08 20:09:40 得分 0
假使变量为A 和B
方法:
A=A+B;
B=A-B;
A=A-B;
Top
22 楼JennyVenus()回复于 2002-10-08 20:39:00 得分 0
a=a+b
b=a-b
a=a-b
哈哈和上面一样了
这个在两个不同类型的变量交换时候有bug,整型的也要考虑溢出Top
23 楼WingForce(初六,履霜,坚冰至。)回复于 2002-10-08 22:21:56 得分 0
merlinran(天行者) 说得对,类的实例显然也是变量的一种,但是显然不是用随便的方法就可以交换的Top
24 楼julyclyde(Java初学(大学不教只好自己学))回复于 2002-10-08 22:33:35 得分 0
这种问题有意义吗?Top
25 楼FFTiger(烦烦虎)回复于 2002-10-08 23:14:41 得分 0
不用那麻烦吧,用的时候再加个指针,然后用指针来交换。哦,忘了,不能用第三个变量。我还是同意上面老兄的意见,没意义!相比而言,这点浪费不算什么,没必要专门为这写一段冗长的程序嘛。Top
26 楼sylmoon(专注Oracle)回复于 2002-10-09 13:37:16 得分 0
:)Top
27 楼muche(妖刀)回复于 2002-10-09 13:41:32 得分 0
好象是MS的题,就是以时间换空间,有多种方式,上面都有!
a=a+b
b=a-b
a=a-b
Top
28 楼lufly2000(凌绝顶)回复于 2002-10-10 15:49:21 得分 0
关注。。Top
29 楼lizhongkun(泛型)回复于 2002-10-10 16:43:30 得分 0
基本上就是 kbsoft(景乐) ( 的方法了!想不出来别的了Top
30 楼fdm_sea(klesh)回复于 2002-10-10 17:07:59 得分 0
楼主是希望什么呢?
Top
31 楼fangrk(加把油,伙计!)回复于 2002-10-10 17:10:25 得分 0
如果用模板做呢?
都只有考虑了int类型的
不用临时变量有什么好?我觉得这种题目无聊。Top
-
相关文章
2秒记住本站域名
玩过泡泡龙吗?Readygo?Go! 再加上.Com.Cn的后缀,那就是大名小顶的readygo.com.cn
