随笔- 509  文章- 0  评论- 151  阅读- 22万 
剑指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\n", res);
22         }
23     }
24     
25     return 0;
26 }
复制代码

 

 posted on   zhuli19901106  阅读(279)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示