当前位置:   article > 正文

面试题 05.06. 整数转换(力扣)(OJ题)_类型转换 oj题目

类型转换 oj题目

题目链接:面试题 05.06. 整数转换 - 力扣(LeetCode)

所属专栏:刷题

整数转换。编写一个函数,确定需要改变几个位才能将整数A转成整数B。

示例1:

 输入:A = 29 (或者0b11101), B = 15(或者0b01111)
 输出:2

示例2:

 输入:A = 1,B = 2
 输出:2

提示:

  1. A,B范围在[-2147483648, 2147483647]之间

分析: 

大家看见示例1大概率是以为十进制直接比较,但是如果看到示例2你就会发现实际上比较的是2进制,一般涉及到2进制都会涉及到位运算

参考代码:

  1. int convertInteger(int A, int B)
  2. {
  3. int count = 0;
  4. int c = A ^ B;
  5. /*关键点*/
  6. int sum = 32;
  7. //因为int类型最多只要比较32位
  8. while (c != 0&&sum)
  9. { /*c!=0:减少比较次数,若没有,则会所有情况都会比较32次,像A=1,B=2的情况只需比较最低的几位,若比较32次则严重影响效率*/
  10. if (c & 1 == 1)//看哪些位上的数为1,说明该位是AB两数不同的位,需要改变
  11. count++;
  12. c = c >> 1;//比较的是最后一位是否为1
  13. sum--;//记得减减
  14. }
  15. return count;
  16. }

恭喜你今天又进步一点点啦~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小舞很执着/article/detail/908704
推荐阅读
相关标签
  

闽ICP备14008679号