【C language】两个数的交换

简介: 【C language】两个数的交换

题解:两个数的交换(第三变量 + 数学求和 + 异或法)


1.题目

题目如下:请交换两个整形变量的数值,且不使用第三临时变量

2.第三变量法

int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
int temp = a;
a = b;
b = temp;
printf("swap later: a = %d; b = %d", a, b);

优点:常规且效率高
缺点:借用第三临时变量

3.数学方法

int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
a = a + b;
b = a - b;
a = a - b;
printf("swap later: a = %d; b = %d", a, b);

缺点:溢出风险

4.异或方法

int a = 10;
int b = 20;
printf("swap before: a = %d; b = %d", a, b);
a = a ^ b;
b = a ^ b;
a = a ^ b;
printf("swap later: a = %d; b = %d", a, b);

缺点:

  • 可读性差
  • 仅适用于整形
  • 效率低

EOF

相关文章
|
2月前
【C language】统计某数中二进制1的个数
【C language】统计某数中二进制1的个数
【C language】统计某数中二进制1的个数
|
12月前
交换两个数的值的方法(三种)
交换两个数的值的方法(三种)
56 1
|
5月前
数组地址等于第一个元素地址
数组地址等于第一个元素地址
不使用第三变量。如何对2个数进行交换
不使用第三变量。如何对2个数进行交换
74 0
|
机器学习/深度学习 Java
java中swap方法交换两个数的值的两种写法
java中swap方法交换两个数的值的两种写法
交换字符串的顺序
当我们想要交换一个字符串的顺序,我们应该怎么做呢,例如“abcdefg”我们要转化为“gfedcba”,那我们来看看下面的代码
LeetCode contest 187 1437. 是否所有 1 都至少相隔 k 个元素 Check If All 1's Are at Least Length K Places Away
LeetCode contest 187 1437. 是否所有 1 都至少相隔 k 个元素 Check If All 1's Are at Least Length K Places Away
LeetCode 167 Two Sum II - Input array is sorted(输入已排序数组,求其中两个数的和等于给定的数)
给定一个有序数组和一个目标值 找出数组中两个成员,两者之和为目标值,并顺序输出
81 0
|
SQL
【TP5.1】数据包含在一位数组内内并且计算某一列的总和
【TP5.1】数据包含在一位数组内内并且计算某一列的总和
123 0
【TP5.1】数据包含在一位数组内内并且计算某一列的总和
(第11列)C语言练习:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。五步带你解决。
(第11列)C语言练习:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。五步带你解决。
(第11列)C语言练习:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组。五步带你解决。