面试题10二进制中1的个数

来源:互联网 发布:jquery-ui.min.js 编辑:程序博客网 时间:2024/06/02 05:09

地址: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的个数。

#include <stdio.h>int 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****************************************************************/


0 0
原创粉丝点击