1. 程式人生 > >不使用任何中間變數如何將a、b的值進行交換

不使用任何中間變數如何將a、b的值進行交換

此題主要是考察工作經驗,在日常工作中經驗遇到記憶體不夠的情況,在記憶體不夠的情況,怎麼不使用中間變數使兩個變數的值進行交換呢?

程式碼實現:

#include<stdio.h>
#include <stdlib.h>

void swap1(int& a,int& b)		//使用中間變數交換兩個值
{
	int temp = a;
	a = b;
	b = temp;
}

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;
}

void main1mianshiti7()
{
	int a1 = 1, b1 = 2;
	int a2 = 10, b2 = 15;
	int a3 = 78, b3 = 90;
	int a = 2147483647, b = 1;
	printf("a1=%p,b1=%p", &a1, &b1);
	swap1(a1, b1);
	swap2(a2, b2);
	swap3(a3, b3);
	printf("swap after~~~~~~~~~~~~~\n");
	printf("a1=%d,b1=%d\n", a1, b1);
	printf("a2=%d,b2=%d\n", a2, b2);
	printf("a3=%d,b3=%d\n", a3, b3);
	swap2(a, b);
	printf("a=%d,b=%d\n", a, b);
	system("pause");
}
第一種方法是最為常規的方法,在這裡不做過多的介紹。

第二種方法是採用一種簡單的加減法演算法來達到交換兩個值的目的。這種方法的缺點是做加法、減法、乘法的時候可能會導致資料溢位。

第三種犯法是採用按位異或的方式交換兩個值。按位異或運算子"^"的功能是將參與運算子的兩個數各對應的二進位制位相依或,如果對應的二進位制位相同,則結果為0,否則結果為1,。這樣運算3次即可交換兩個數。

補充:第二種方法在除錯的時候,可以看到雖然你產生了溢位問題,但是交換操作依然是成功的。