首页 > 其他 > 详细

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

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

解法一:若二进制末尾为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的个数

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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!