剑指Offer之二进制中1的个数
- 题目描述:
-
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
- 输入:
-
输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。
。n保证是int范围内的一个整数。
- 输出:
-
对应每个测试案例,
输出一个整数,代表输入的那个数中1的个数。
- 样例输入:
-
3 4 5 -1
- 样例输出:
-
1 2 32
【解析】:
/********************************* * 日期:2013-11-18 * 作者:SJF0115 * 题号: 题目1513:二进制中1的个数 * 来源:https://ac.jobdu.com/problem.php?pid=1513 * 结果:AC * 来源:剑指Offer * 总结: **********************************/ #include<iostream> #include<stdio.h> #include<string> using namespace std; int NumberOfOne(int n){ int flag = 1; int count = 0; while(flag){ if(flag & n){ count++; } flag = flag << 1; } return count; } int main() { int i,n,num; while(scanf("%d",&n) != EOF){ for(i = 0;i < n;i++){ scanf("%d",&num); printf("%d\n",NumberOfOne(num)); } } return 0; }
另一种方法:
int NumberOfOne(int n){ int count = 0; while(n){ count++; n = (n-1) & n; } return count; }
最后更新:2017-04-03 14:54:08