Sian 发表于 2014-2-20 21:38:07

交换两个数字的两种算法

如果有变量a=10, b=11,将a、b两变量的值进行交换,如何操作?
1、使用第三个变量temp
#include <stdio.h>

int main() {
   
                int a = 10;
                int b = 11;

                printf("Before switch:\n a=%d, b=%d\n", a, b);

                int temp;
                temp = a;
                a = b;
                b = temp;

                printf("After switch:\n a=%d, b=%d\n",a ,b);
   
}
2、通过运算相互交换#include <stdio.h>

int main() {
   
                int a = 10;
                int b = 11;
   
                printf("Before switch:\n a=%d, b=%d\n", a, b);
   
                a = a + b;
                b = a - b;
                a = a - b;
   
                printf("After switch:\n a=%d, b=%d\n",a ,b);
   
}PS:第二种方法需要一定的空间想像能力!!

Sian 发表于 2014-2-20 21:40:37

输出结果为:
Before switch:
a=10, b=11
After switch:
a=11, b=10

Sian 发表于 2014-3-2 12:08:38

还有第三个方法:
#include <stdio.h>

int main() {

    int a = 10;
    int b = 11;
   
    // 利异或的规律a^b^b == a
    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
   
    printf("a=%d, b=%d\n", a, b);

}

同样可以得出互换的效果
页: [1]
查看完整版本: 交换两个数字的两种算法