题解 | #查找输入整数二进制中1的个数# 高效位运算

查找输入整数二进制中1的个数

https://www.nowcoder.com/practice/1b46eb4cf3fa49b9965ac3c2c1caf5ad

C++ 位运算基本操作(本质还是:遍历法)

#include <iostream>
using namespace std;

int main() {

    int cnt = 0;
    size_t val;
    while(cin>>val){
        cnt = 0;
        while(val){
            if(val & 1) cnt++;
            val >>= 1;
        }
        cout << cnt << endl;
    }

    return 0;
}

C++ 位运算高效思路(有几个一就判断几次!)

#include <iostream>
using namespace std;

int main() {

    int cnt = 0;
    size_t val;
    while(cin>>val){
        cnt = 0;
        while(val){
            val &= (val - 1);
		  	cnt++;
		  	/*
			示例一:
			0000 0010 & 0000 0001 => 1
			示例二:
			0001 1111 & 0001 1110 => 1
		=>  0001 1110 & 0001 1101 => 2
		=>  0001 1100 & 0001 1011 => 3
			...
			由上示例可以看出每次运算都可以消掉一个 1!故:1 的个数就是该方式的循环次数!
			*/
        }
        cout << cnt << endl;
    }

    return 0;
}

全部评论

相关推荐

M_bao:换个排版吧哥们,看着费劲
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务