C++ 算法之 输入两个整数m n,求计算须要改变m的二进制表示中的多少位才干得到n
思路:先把m与n进行异或运算,再统计异或结果其中的1的个数;
异或:同样为0,不同为1; 0^0 = 0; 1^1 = 0; 0^1 = 1; 1^0 = 1;
比方10 : 1010 。 13:1101;
10^13 ------> 1 0 1 0
1 1 0 1
结果 0 1 1 1
异或有几个不同为就会有几个1。统计1的个数就知道须要改变几位了
// changeNumber.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <iostream>
using namespace std;
int changeNum(int n,int m)
{
int k = (m ^ n);
return k;
}
int NumberOf1Ex2(int n)
{
int count = 0;
while (n)
{
n = n & (n-1);
++count;
}
return count;
}
int _tmain(int argc, _TCHAR* argv[])
{
int k = changeNum(10,13);
int l = NumberOf1Ex2(k);
cout<<l<<endl;
getchar();
return 0;
}
浙公网安备 33010602011771号