首页 > 代码库 > C++ 算法之 输入两个整数m n,求计算需要改变m的二进制表示中的多少位才能得到n

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;}


 

 

C++ 算法之 输入两个整数m n,求计算需要改变m的二进制表示中的多少位才能得到n