题目地址:http://ac.jobdu.com/problem.php?pid=1513
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。
。n保证是int范围内的一个整数。
对应每个测试案例,
输出一个整数,代表输入的那个数中1的个数。
3 4 5 -1
1 2 32
#include <stdio.h> int Count (int n){ int cnt = 0; unsigned int flag = 1; while (flag){ if (n & flag) ++cnt; flag = flag << 1; } return cnt; } int main(void){ int T; int n; while (scanf ("%d", &T) != EOF){ while (T-- != 0){ scanf ("%d", &n); printf ("%d\n", Count (n)); } } return 0; }
#include <stdio.h> int Count (int n){ int cnt = 0; while (n){ ++cnt; n &= (n - 1); } return cnt; } int main(void){ int T; int n; while (scanf ("%d", &T) != EOF){ while (T-- != 0){ scanf ("%d", &n); printf ("%d\n", Count (n)); } } return 0; }
原文:http://blog.csdn.net/jdplus/article/details/19285115