• 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
  • 相关阅读:
    你了解JWT吗?
    链接
    C#读取EXCEL发生错误
    TM1637驱动数码管
    Keil中的Code,RO,RW,ZI分别表示什么
    IE 不支持 promise 解决方法
    JS 时间戳转日期格式
    JS input 输入框只能输入 字母和汉字
    小程序 保存图片失败
    小程序充值,方法步骤
  • 原文地址:https://www.cnblogs.com/dracohan/p/3943343.html
Copyright © 2020-2023  润新知