原始思路:将a和b转换为对应的二进制数,位数不同,用0补齐,然后对应位比较,最终只能解决两个是正数的情况代码如下:
int bitSwapRequired(int a, int b)
{
// write your code here
string ta;
string tb;
int res=0;
while(a)
{
int tema=a%2;
ta+=to_string(long double (tema));
a/=2;
}
while(b)
{
int temb=b%2;
tb+=to_string(long double (temb));
b/=2;
}
if(ta.length()>tb.length())
{
int num=ta.length()-tb.length();
for(int i=0;i<num;i++)
{
tb=tb+'0';
}
}
else if(ta.length()<tb.length())
{
int x=tb.length()-ta.length();
for(int i=0;i<x;i++)
{
ta=ta+'0';
}
}
for(int j=0;j<tb.length();j++)
{
if(ta[j]!=tb[j])
res++;
}
return res;
}
正确&简单思路:a,b的每一位与每个2次幂位相与,之后再做异或即可判断出,该位是否一样,代码如下:
int bitSwapRequired(int a, int b)
{
// write your code here
int count=0;
int flag=1;
int i=0,j=0;
while(flag)
{
i=a&flag;
j=b&flag;
if(i^j)
count++;
flag=flag<<1;
}
return count;
}