Description:
The Hamming distance between two integers is the number of positions at which the corresponding bits are different.
Given two integers x
and y
, calculate the Hamming distance.
Note:
0 ≤ x
, y
< 231.
Example:
Input: x = 1, y = 4
Output: 2
Explanation:
1 (0 0 0 1)
4 (0 1 0 0)
↑ ↑
The above arrows point to positions where the corresponding bits are different.
Solution 1:
#include <iostream>
#include <string>
using namespace std;
//十进制转二进制求法
int main() {
int x, y;
cin >> x;
cin >> y;
int count = 0;
string s = "", v="";
for (int a =x; a;a = a / 2)
{
s = s + (a % 2 ? '1' : '0');
}
for (int a = y; a;a = a / 2)
{
v = v+ (a % 2 ? '1' : '0');
}
int len = s.length() > v.length() ? s.length() : v.length();
s.append(len - s.length(), '0');
v.append(len -v.length(),'0');
cout << s << endl;
cout << v << endl;
cout << len << endl;
for (int i = 0; i < len; i++)
{
cout << i << endl;
if (s[i] != v[i] )
count++;
cout << s[i] << endl;
cout << v[i] << endl;
}
cout << count << endl;
cin >> s;
return count;
}
Solution 2:
class Solution {
public:
int hammingDistance(int x, int y) {
int res = 0;
int exc = x ^ y;
while(exc>0) {
res += exc & 1;
if(exc == 1 || exc ==0)
return res;
exc = exc >> 1;
}
return res;
}
};
Solution 3:
class Solution {
public:
int hammingDistance(int x, int y) {
int res = 0, exc = x ^ y;
for (int i = 0; i < 32; ++i) {
res += (exc >> i) & 1;
}
return res;
}
};
Solution 4:
class Solution {
public:
int hammingDistance(int x, int y) {
int n = x ^ y;
int count = 0;
while(n){
count++;
n = n & (n-1);
}
return count;
}
};