文章

15

粉丝

142

获赞

26

访问

20.3k

头像
0和1的个数 题解:
P1008 华南师范大学/贵州大学机试
发布于2023年5月2日 13:51
阅读数 1.5k

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    int a,res=0;
    cin >> a;
    while(a){
        a -= (a & -a);
        res ++;
    }
    printf("count0=%d count1=%d",(32-res),res);
    
    return 0;
}

这段代码的功能是统计一个整数二进制中0和1的个数。

首先,用户需要输入一个整数a,然后通过while循环不断地将其转化为二进制表示下最低位的1,然后将该最低位1所处的位置变为0,并将次数记录在res里面。最后输出32减去res的值(即二进制表示下0的个数)以及res的值(即二进制表示下1的个数)。

这个算法的时间复杂度与二进制中1的个数有关,具体来说,对于一个n位的二进制数,这个算法的时间复杂度是O(k),其中k表示n中1的个数,因此这个算法非常高效。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发