原题链接:蓝桥杯算法训练-二进制数数
解题思路:
合理使用位运算与‘&’可以用来求二进制数的1的个数
num=num&(num-1);
定义一个循环,当num!=0就继续循环
例如:4&3 【位运算都是二进制补码参与运算】
(前面的0省略不写)0100 【8 4 2 1】
(前面的0省略不写)0011 【8 4 2 1】
位运算的结果是:
(前面的0省略不写)0000 【8 4 2 1】
此时结果为0,计数器加1(即二进制表示的4中有一个‘1’)
参考代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | #include <iostream> using namespace std; int main() { int count=0,a,b,num; //定义一个计数器count用来存储二进制中1的个数 cin>>a>>b; while (b>=a) //实现a~b的循环遍历 { num=a; while (num!=0) { num=num&(num-1); //重点 count++; } a++; } cout<<count<<endl; return 0; } |
9.9 分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复