九度 1513:二进制中1的个数
题目描述:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
总结
剑指 offer 原题, 要注意负数移位是永远到不了 0 的
代码
#include <iostream> #include <stdio.h> using namespace std; int count1(int x) { int cnt = 0; while(x != 0) { x = x&(x-1); cnt ++; } return cnt; } int main() { //freopen("testcase.txt", "r", stdin); int n; while(scanf("%d", &n) != EOF) { for(int i = 0; i < n; i ++) { int a; scanf("%d", &a); printf("%d\n", count1(a)); } } return 0; }