剑指Offer之二进制中1的个数

来源:互联网 发布:淘宝上卖的沙发怎么样 编辑:程序博客网 时间:2024/05/24 01:03

题目描述:

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

输入:

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

输出:

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

样例输入:
345-1
样例输出:
1232


【解析】:



/**********************************   日期:2013-11-18*   作者:SJF0115*   题号: 题目1513:二进制中1的个数*   来源:http://ac.jobdu.com/problem.php?pid=1513*   结果:AC*   来源:剑指Offer*   总结:**********************************/#include<iostream>#include<stdio.h>#include<string>using namespace std;int NumberOfOne(int n){    int flag = 1;    int count = 0;    while(flag){        if(flag & n){            count++;        }        flag = flag << 1;    }    return count;}int main(){int i,n,num;while(scanf("%d",&n) != EOF){        for(i = 0;i < n;i++){            scanf("%d",&num);            printf("%d\n",NumberOfOne(num));        }}    return 0;}




另一种方法:




int NumberOfOne(int n){    int count = 0;    while(n){        count++;        n = (n-1) & n;    }    return count;}




原创粉丝点击