zoukankan      html  css  js  c++  java
  • IT公司100题-28-整数的二进制表示中1的个数

    问题描述:

    输入一个整数n,求n的二进制表示中,一共有多少个1。例如n=8,二进制表示为00001000,二进制表示中有1个1。
     
     
    分析:
    如果一个数n不为0,那么n-1的二进制表示,与n的二进制表示相比,n的二进制表示最右边的1变为0,而最右边的1所对应的0全部变为1。其余位不受影响。
    例如:n的二进制表示为****1000,则n-1的二进制表示为****0111,则n&(n-1)的二进制表示为****0000。将n二进制表示中最右边的1去掉了。
    将n赋值为n&(n-1),继续循环此操作,直到n为0。
     
    代码实现:
     1 #include <iostream>
     2 using namespace std;
     3 
     4 int calc(int num) {
     5     int count;
     6     while(num){
     7         count++;
     8         num = num & (num-1);
     9     }
    10     return count;
    11 }
    12 
    13 int main() {
    14     cout << "input n: " << endl;
    15     int n;
    16     cin >> n;
    17     int count = calc(n);
    18     cout << "The num of 1 in " << n << " is: " << count << endl;
    19     return 0;
    20 }

    输出:

    $ ./a.exe
    input n:
    11
    The num of 1 in 11 is: 3
  • 相关阅读:
    周记
    周记
    代码复审核查表
    两人合作的案例and周记
    第一周周记
    15 手写数字识别-小数据集(2)
    11.分类与监督学习,朴素贝叶斯分类算法
    15 手写数字识别-小数据集
    14 深度学习-卷积
    十二次作业
  • 原文地址:https://www.cnblogs.com/dracohan/p/3943343.html
Copyright © 2011-2022 走看看