题解 | #求int型正整数在内存中存储时1的个数#

求int型正整数在内存中存储时1的个数

http://www.nowcoder.com/practice/440f16e490a0404786865e99c6ad91c9

思路

这道题本来想着要把输入的二进制求解出来,后来发现是没有必要的。我只需要在计算的过程中判断取模的结果是否为1,用一个计数器就可以了。

C语言版本

#include <stdio.h>

int main() {

    int n;
    scanf("%d", &n);

    int count = 0;
    while (1)
    {
        if (n / 2 == 0)
        {
            count += 1;
            break;
        }
        if (n % 2 == 1)
        {
            count += 1;
        }
        n /= 2;
    }

    printf("%d\n", count);
    return 0;
}

后来看到题目上的考察点是位运算。我想了一下应该还有一种解法。

&的规则是,有0,则为0 ,所以,我们只需让value&1,然后检测最低比特位即可判断出该二进制中有多少个1:

#include <stdio.h>

int main() {

    int n;
    scanf("%d", &n);

    int count = 0;
    while (n)
    {
        count += n & 1;
        n = n >> 1;
    }

    printf("%d\n", count);
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务