赞
踩
题目链接:面试题 05.06. 整数转换 - 力扣(LeetCode)
所属专栏:刷题
整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。
示例1:
输入:A = 29 (或者0b11101), B = 15(或者0b01111) 输出:2
示例2:
输入:A = 1,B = 2 输出:2
提示:
大家看见示例1大概率是以为十进制直接比较,但是如果看到示例2你就会发现实际上比较的是2进制,一般涉及到2进制都会涉及到位运算
- int convertInteger(int A, int B)
- {
- int count = 0;
- int c = A ^ B;
- /*关键点*/
- int sum = 32;
- //因为int类型最多只要比较32位
- while (c != 0&&sum)
- { /*c!=0:减少比较次数,若没有,则会所有情况都会比较32次,像A=1,B=2的情况只需比较最低的几位,若比较32次则严重影响效率*/
- if (c & 1 == 1)//看哪些位上的数为1,说明该位是AB两数不同的位,需要改变
- count++;
- c = c >> 1;//比较的是最后一位是否为1
- sum--;//记得减减
- }
- return count;
- }
恭喜你今天又进步一点点啦~
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。