码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-08-09 21:26:59      阅读:289      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   使用   div   时间   amp   算法   

解法一:若二进制末尾为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)的复杂度;

编程之美——二进制数中1的个数,布布扣,bubuko.com

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

标签:style   blog   color   使用   div   时间   amp   算法   

原文地址:http://www.cnblogs.com/chengyuz/p/3901538.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!