-
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
时间限制:1 秒
内存限制:128 兆
题目描述:
-
输入:
-
输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。
。n保证是int范围内的一个整数。
-
输出:
-
对应每个测试案例,
输出一个整数,代表输入的那个数中1的个数。
-
样例输入:
-
3 4 5 -1
-
样例输出:
-
1 2 32
-
分析:此题位移运算和逻辑运算计算1的个数,疑惑为位运算或逻辑运算针对的是整数(所有整数类型)的二进制表示, 与其他类型则没有定义?
-
#include <iostream> #include <cstdio> using namespace std; int getOneCount(int n, int length) { int count = 0; while (n && length) { if (n & 1 == 1) ++count; n >>= 1; length--; } return count; } int main(void) { int t, n; scanf("%d", &t); int length = sizeof(int) * 8; for (int i = 0; i < t; ++i) { scanf("%d", &n); printf("%d\n", getOneCount(n, length)); } return 0; }