标签:blog ar io os sp 2014 log bs amp
思路:先把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
标签:blog ar io os sp 2014 log bs amp
原文地址:http://blog.csdn.net/djb100316878/article/details/42001389