编程之美——二进制数中1的个数

解法一:若二进制末尾为1,则除以2余1;

int count(int a)
{
    int num=0;
    while(a)
    {
        if(a%2==1)
            ++num;
        a=a/2;
    }
    return num;
}

解法二:使用移位操作相除:

int count(int a)
{
    int num=0;
    while(a)
    {
        num+=a&0x01;
        a>>=1;
    }
    return num;
}

解法三:以上两种算法复杂度log2(t),t为a的二进制表示位数,若要求复杂度仅与二进制表示中1的个数相关,则有:

int count(int a)
{
    int num=0;
    while(a)
    {
        a&=a-1;
        ++num;
    }
    return num;
}

当然也可以采取查表法,以时间换空间,获得O(1)的复杂度;

posted @ 2014-08-09 20:41  chengcy  Views(143)  Comments(0)    收藏  举报