C语言

您所在的位置:网站首页 交换两个整数的算法 C语言

C语言

2024-07-12 03:00| 来源: 网络整理| 查看: 265

面试中遇到这种题你会怎么做?(按位异或的规律我写在了结尾) 题目:a=3,b=5,c语言来编程交换两个整型变量的值,即使得a=5,b=3. 但是不能用到第三个变量 **1.**首先看下非常普遍的一种方法(但这种方法不符合题意,有第三个变量参与) 把这种问题转换成往瓶子里倒水的问题,(有三个瓶子一个装着可乐,一个装着雪碧,另外一个是空瓶子,a.把可乐倒进空瓶。b.把雪碧倒进盛可乐的瓶子。c.把空瓶子里面的可乐倒进已经空着的雪碧瓶)

#include //第一种 利用变量 int main() { int a = 3; int b = 5; int c = 0;//空瓶 printf("交换前:a=%d,b=%d\n",a,b); c = a;//1 a空了 a = b;//2 b空了 b = c;//3 printf("交换后:a=%d,b=%d\n", a, b); return 0; }

**2.**利用加减法来解决(但是还是有弊端缺陷的),如果当数值过大时,会出现溢出问题。 数值小的话这种方法相对来说也是很实用的,而且通俗易懂。

#include//第二种 利用加减法,当数值过大时会出现溢出问题 #include int main() { //int 4字节 32bit位 INT_MAX; //2147483647 右键-->转到定义 int a = 3; int b = 5; printf("交换前:a=%d,b=%d\n", a, b); a = a + b;// a=8 b = a - b;// b=3 a = a - b; //a=5 printf("交换后:a=%d,b=%d\n", a, b); return 0; }

**3.**按位异或登场!!!什么叫按位异或呢,首先这个东西不会形成溢出问题且没有使用第三个变量,其次是按位异或是针对二进制而言的,即对应的二进制位相同就为0;对应的二进制相异就为1. 举个例子:011与101按位异或之后为110

#include//第三种 使用按位异或 int main() { int a = 3;//011 int b = 5;//101 printf("交换前:a=%d,b=%d\n",a,b); a = a ^ b;// a 110 b = a ^ b;// b 011 a = a ^ b;// a 101 printf("交换后:a=%d,b=%d\n", a, b); }

按位异或的规律: a^a=0 , 0^a=a(按位异或是满足交换律的) 好啦,本次分享就到这里了!!!希望对小伙伴们有所帮助。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3