题目
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
示例:
输入: x = 1, y = 4
输出: 2
解释:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
上面的箭头指出了对应二进制位不同的位置。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/hamming-distance
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
汉明距离
个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。
给出两个整数 x 和 y,计算它们之间的汉明距离。
注意:
0 ≤ x, y < 231.
*/
#include <stdio.h>
/**
思路一:总体是利用十进制转换为二进制的方法(除法+余数)
思路二:将x和y取余操作后的结过转化为二进制,查找1的个数
*/
int hammingDistance(int x, int y)
{
int num1[32] = {0};
int num2[32] = {0};
int distance = 0;
int temp,i=0;
while(x!=0)
{
num1[i++] = x%2;
x = x/2;
// printf("%d %d\n",num1[i],x);
}
i = 0;
while(y!=0)
{
num2[i++] = y%2;
y = y/2;
//printf("%d %d\n",num2[i],y);
}
for(i = 0; i< 32 ; ++i)
{
//printf("num1 = %d num2 = %d\n",num1[i],num2[i]);
if(num1[i]!= num2[i])
{
distance++;
}
}
return distance;
}
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
int result =hammingDistance(a,b);
printf("result == %d",result);
return 0;
}