思路:
牵扯到二进制数,基本上要考虑位运算符,相关知识可以见
之前做过类似的题目,大致思路就是先用按位异或^找出不同位,再用n&(n-1)计算出不同位的个数,但是这道题有个小坑,就是极限了话,n刚好为int类型的最小值(即二进制数为1000……0000),此时n-1就会溢出。
就是A和B的二进制数刚好是1000……0000和0000……0000,此时n=A^B就是1000……0000,所以此时n再减1就溢出了,因此我们要考虑这个特殊情况
INT_MIN 代表int类型的最小值,即-2147483648
INT_MAX 代表int类型的最大值,即2147483647
定义INT_MIN 只能 INT_MIN = ( - INT_MAX) - 1
而不能 INT_MIN = - ( INT_MAX + 1) 因为这样就溢出最大值了 文章来源:https://www.toymoban.com/news/detail-835198.html
其头文件为#include<limits.h>文章来源地址https://www.toymoban.com/news/detail-835198.html
int convertInteger(int A, int B)
{
int count=0;
int n=A^B;
while(n)
{
if(n==INT_MIN) //如果是最小值
{
count++;
break;
}
n=n&(n-1); //减去一个1的个数
count++;
}
return count;
}
到了这里,关于力扣 面试题 05.06. 整数转换的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!