目 录CONTENT

文章目录

801. 二进制中1的个数.md

Gz
Gz
2022-03-10 / 0 评论 / 0 点赞 / 405 阅读 / 215 字 / 正在检测是否收录...

801. 二进制中1的个数

image-20220118195431613

位运算操作

#include<iostream>
using namespace std;
const int N = 100010;
int a[N];
int main(){
    int n;
    scanf("%d",&n);
    
    for(int i = 0 ; i < n ; i ++){ 
        scanf("%d",&a[i]);
        int sum = 0;
        //循环二进制最大表示数 &1 表示补一 偶数变1
        for(int k = 31 ; k >= 0 ; k --){
            if((a[i] >> k & 1) == 1) sum++;
        }
        printf("%d ",sum);
    }
    return 0;
}

lowbit算法

#include<iostream>
using namespace std;
//lowbit求出二进制最后一个位数为1开始的数 如1010 得10
int lowbit(int x){
    return x & -x; //(-x) = (~x+1) x取反+1
}

int main(){
    int n;
    scanf("%d",&n);
    
    while(n--){
        
        int x;
        scanf("%d",&x);
        int res = 0 ;
        //x不为0 则一直减去最后一位为1的数 最后循环的次数为1出现的次数
        while(x) x-=lowbit(x),res++;
        printf("%d ",res);
    }
    
    
    return 0;
}
0

评论区