世界上有10种人,一种懂二进制,一种不懂。
那么你知道两个int32整数m和n的二进制表达,有多少个位(bit)不同么?
对于这道题目,首先把对应的十进制整数转换为二进制,然后对比两个二进制,得出结果。
至于用什么来存储二进制,一个是用数组来存储,如果考虑空间问题,可以用队列来存储,而且队列可能更快。
下面两种方法都进行一遍实现。
首先是用数组来实现
#include
using namespace std;
int BinaryDiff(int m,int n)
{
int mm[32];//存储参数m的二进制格式
int nn[32];//存储参数n的二进制格式
int m_len=0,n_len=0;//算出m和n的二进制最大的位数
int diff=0;//不同个数
for (int i = 0; i < 32; i++)
{
nn[i] = 0;
mm[i] = 0;
}
/*
*转换成为二进制
*/
for (int i=0; m;i++,m_len++)
{
mm[i] = m % 2;
m = m / 2;
}
for (int i = 0; n; i++, n_len++)
{
nn[i] = n % 2;
n = n / 2;
}
//比较不同位数
if (m_len >= n_len)
{
for (int i = 0; i < m_len; i++)
{
if (mm[i]!=nn[i])
{
diff++;
}
}
}
else
{
for (int i = 0; i < n_len; i++)
{
if (mm[i] != nn[i])
{
diff++;
}
}
}
return diff;
}
int main(){
int m,n;
cout << "input m:" << endl;
cin >> m;
cout << "input n:" << endl;
cin >> n;
cout << BinaryDiff(m,n);
return 0;
}