解题思路:
合理使用位运算与‘&’可以用来求二进制数的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;
}


点赞(0)
 

9.9 分

1 人评分

 

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论