本文共 1004 字,大约阅读时间需要 3 分钟。
地址:http://ac.jobdu.com/problem.php?pid=1513
题目1513:二进制中1的个数
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
输入可能包含多个测试样例。
对于每个输入文件,第一行输入一个整数T,代表测试样例的数量。对于每个测试样例输入为一个整数。 。n保证是int范围内的一个整数。
对应每个测试案例,
输出一个整数,代表输入的那个数中1的个数。
345-1
1232
数(a-1)& a 获得数a消去了从右到左的第一个1的数a'。
例如:
10 == 1010
1010 - 1 = 1001
1001 & 1010 == 1000
不断重复以上过程,直到a == 0.至此,重复的次数 == a中含有1的个数。
#includeint main(){ int n; while(scanf("%d", &n) != EOF) { int a = 0; while(n --) { scanf("%d", &a); if (a == 0) { printf("0\n"); continue; } int i = 0; do { a = (a - 1) & a; i ++; }while(a != 0); printf("%d\n", i); } } return 0;}/************************************************************** Problem: 1513 Language: C++ Result: Accepted Time:80 ms Memory:1020 kb****************************************************************/
转载地址:http://hhsob.baihongyu.com/