题目1513:二进制中1的个数

来源:互联网 发布:仙桃数据谷 编辑:程序博客网 时间:2024/05/22 09:07

时间限制:1 秒

内存限制:128 兆


题目描述:

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

输入:

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

输出:

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

样例输入:
345-1
样例输出:
1232
分析:此题位移运算和逻辑运算计算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;}


0 0