您的位置:首页 > 其它

九度OJ 1513 二进制中1的个数

2014-02-16 14:03 288 查看
题目地址: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;
}


参考资料:何海涛 -- 程序员面试题精选100题(22)-整数二进制表示中1的个数[算法]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: