实现两个整数交换总结
2013-05-06 16:45
381 查看
实现两个整数交换总结(面试中很可能会问到的问题)
怎样把两个整数交换,听起来觉得是很简答的事情,会认为是菜鸟级问题,因为这算是学习任何一门语言中最常见的Code。你很可能不到一分钟就把Code完成,方法当然是借助中间变量(最常见,普通的方法)。可是当面试官问你能否不借助中间变量实现两个数字的交换的时候,是不是脑子嗡的一下,不知道该如何下手了呢?(嘿嘿.......没得关系,这里已经帮你总结好了)
下面我们就简单的总结一下,常用的几种方法,包含不借助中间变量的,直接实现两个数字的交换
(1)最基本的方法就是使用一个临时变量
swap( int *a, int *b ) {
int tmp;
tmp = *a;
*a = *b;
*b = tmp;
}
下面三种方法是不借用中临时变量,而直接做相应的处理后,达到实现交换的目的
(2) 加法运算
swap( int *a, int *b ) {
*a = *a + *b ; // 此时 *a 其实是作为一个中间变量存在的
*b = *a - *b;
*a = *a - *b;
}
(3)减法运算
swap( int *a, int *b ) {
*a = *a - *b ; // 此时 *a 其实是作为一个中间变量存在的
*b = *a + *b;
*a = *b - *a; // 其实是简单的加法操作*a - ( *a - *b )
}
(4)异或运算(满足交换律 *a ^ *b ^ *a = *b )
swap( int *a, int *b ) {
*a = *a ^ *b ; // 此时 *a 其实是作为一个中间变量存在的
*b = *a ^ *b; //
*a = *b ^ *a;
}
注意:在(4)中,不知道你发现问题没,就是当 *a = *b 时会出现什么问题呢?还是你要的结果么?
I am so sorry!答案已经改变了,是什么呢,是*a 和 *b 都变为 0 值了。为什么呢?你知道吗?
(就是最基本的“相同为0,相异为1”)
As you see, so easy!
相关文章推荐
- 如何实现两个整数类型的数字交换
- 实现两个整数值的交换(无中间变量)
- 《编程之美 》2.1 位运算实现—交换两个整数、求和、整数的二进制表达中1的个数
- 不使用中间变量实现两个整数的交换(方法一)
- 一行语句不越界实现交换两个整数
- 请自己实现两个整数变量的交换(多种方法)
- [黑马程序员]对两个整数变量的值进行交换的方法总结
- 指针学习:指针变量作为函数参数实现交换两个整数
- 实现两个整数交换
- 不用辅助变量实现两个整数之间值的交换
- 实现两个整数变量的交换
- (位运算符)请自己实现两个整数变量的交换 ^的特点 (面试题)
- Java中异或运算实现两个整数的交换以及其功能函数实现
- 利用C语言来实现交换两个变量的值,由终端输入两个整数给变量x、y,然后交换x和y的值后,输出x和y。 有不同的方法
- 程序员面试题目总结--链表(7)【实现单链表交换任意两个元素(不包括表头)】
- 利用位操作符实现两个整数的交换
- 不使用第三个变量实现两个整数之间的交换
- java中如何实现具有交换两个整数值
- 为什么异或运算可以实现两个整数的交换,而无需借助第3个临时变量
- 交换两个整数的三种方式(java实现)