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


     

  • 相关阅读:
    grep
    [NOI2009]植物大战僵尸
    sed
    YY的GCD
    awk
    CF1100E
    cat
    tac
    [学习笔记]基数排序
    more
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7191113.html
Copyright © 2020-2023  润新知