题目
Description
海明距离是在指二进制情况下,一个整数变成另外一个整数需要翻转的位数。比如2转换到3需要翻转1位,所以2到3的海明距离是1。给你两个正整数x和y,(x,y<=1,000,000,000)求它们的海明距离。
输入
第一行是一个整数N,表示样例的个数。以后每行两个整数x和y。
输出
每行输出一个整数,及对应样例的结果。
Sample Input
2
1 2
4 7
Sample Output
2
2
思路
将输入的两个整数转化为二进制用数组存储起来,海明距离要计算的是一个整数的二进制翻转成另一个整数的二进制的位数,只要计算出两个整数二进制相对比数字不同的有几个即可,注意的是,当两个整数二进制的位数不同时,高位数多出来的位数同0做比较,例如,当a为6(110)b为9(1001)时,实则是0110与1001相比得出不同的数字有4。
代码
#include<stdio.h>//海明距离
int main()
{
int K;
scanf("%d",&K);
while(K--)
{
int a,b;
scanf("%d %d",&a,&b);
int i,j;
int stra[32]={0},strb[32]={0};
for(i=0;a>0;a/=2)
{
stra[i]=a%2;
i++;
}
for(j=0;b>0;b/=2)
{
strb[j]=b%2;
j++;
}
if(i<j) i=j;
int count=0;
for(int n=0;n<i;n++)
{
if(stra[n]!=strb[n])
count++;
}
printf("%d\n",count);
}
return 0;
}