世界上有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; }