【笔试题】不创建第三个变量,实现两数的交换 (品茗笔试)

【笔试题】不创建第三个变量,实现两数的交换(品茗笔试)

题目: 不创建第三个变量,实现两数的交换。

  交换两个数,我们最先会想到开辟第三个变量,再进行交换。

//第三变量法
swap1(int* a,int* b)
{
    
    
	int temp;
	temp = *a;
	*a = *b;
	*b = temp;
}

  但是,这样的会消耗内存,开辟临时变量。那么看看swap2不开辟第三个变量,采用加减法完成a、b两数的交换。但是这个方法有一个弊端当a、b两个数都是非常大的数时 a+b 时可能就会造成溢出

  最好的解决的方法是采用异或法,这也是品茗当年的一道笔试题。在平时需要交换两数时推荐:第三变量法或者异或法

#include <iostream>
using namespace std; 
//加减法
void swap2(int* a,int* b)
{
    
    
    *a = *a + *b;
    *b = *a - *b;
    *a = *a - *b;
}
//异或法
void swap3(int* a,int* b)
{
    
    
    *a = *a ^ *b;
    *b = *a ^ *b;
    *a = *a ^ *b;
}
int main()
{
    
    
	int a,b;
    while(cin>>a>>b)
    {
    
    
        //swap2(&a,&b);
        swap3(&a,&b);
        cout>>a>>b>>endl;
    }
	return 0;
}

猜你喜欢

转载自blog.csdn.net/Sunnyside_/article/details/115308767