一种不使用中间变量交换两个变量的方法

1 #include <stdio.h>
2
3  int main()
4 {
5 int a, b;
6
7 a ^= b;
8 b ^= a;
9 a ^= b;
10
11 return 0;
12 }

运用了异或的性质:两个相同的数异或等于0,一个数与0异或等于自身,即:a^a = 0, a^0=a.

缺点只适用于32-bit以内的整型,

PS:此性质还可以用来找出1...n,n个数中缺少的一个数.

1 #include <stdio.h>
2
3  int main()
4 {
5 int n;
6 int a[10];
7 while (scanf("%d", &n) != EOF) {
8 int tp = 1;
9
10 for (int i=1; i<n; i++) {
11 scanf("%d", &a[i]);
12 tp ^= a[i];
13 }
14
15 for (int i=1; i<=n; i++) {
16 tp ^= i;
17 }
18
19 printf("%d\n", tp);
20 }
21
22 return 0;
23 }

[Sth aside]

Other method

1 #include <stdio.h>
2
3  int main()
4 {
5 int a, b;
6
7 a = a + b;
8 b = a - b;
9 a = a - b;
10
11 return 0;
12 }
posted @ 2011-05-02 23:33  superbin  阅读(361)  评论(0编辑  收藏  举报