zoukankan      html  css  js  c++  java
  • 剑指Offer

    剑指Offer - 九度1513 - 二进制中1的个数
    2013-11-29 23:35
    题目描述:

    输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

    输入:

    输入可能包含多个测试样例。
    对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。
    n保证是int范围内的一个整数。

    输出:

    对应每个测试案例,
    输出一个整数,代表输入的那个数中1的个数。

    样例输入:
    3
    4
    5
    -1
    样例输出:
    1
    2
    32
    题意分析:
      这题是《编程之美》的原题了,只需要了解两个很巧妙的位操作:x & (-x),x & (x - 1)。
      x & (-x)是树状数组的lowbit操作,能取出x最低位的‘1’。
      x & (x - 1)则正好去掉x最低位的‘1’。
      要数出x中有多少个‘1’,只需要一个一个去掉直到x=0为止。时间复杂度O(log(x)),空间复杂度O(1)。
     1 // 651827    zhuli19901106    1513    Accepted    点击此处查看所有case的执行结果    1020KB    350B    80MS
     2 // 201311151734
     3 #include <cstdio>
     4 using namespace std;
     5 
     6 int main()
     7 {
     8     int x;
     9     int res;
    10     int n;
    11     int i;
    12     
    13     while(scanf("%d", &n) == 1){
    14         for(i = 0; i < n; ++i){
    15             scanf("%d", &x);
    16             res = 0;
    17             while(x){
    18                 x = (x & (x - 1));
    19                 ++res;
    20             }
    21             printf("%d
    ", res);
    22         }
    23     }
    24     
    25     return 0;
    26 }
  • 相关阅读:
    【php】错误日志处理
    【php】正则表达式
    【php】字符串
    【PHP】数组
    【PHP】函数
    【PHP】流程控制
    【PHP】PHP运算符
    【PHP】PHP基本语法
    【前端】CSS总结
    SVN与Apache整合
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3450491.html
Copyright © 2011-2022 走看看