C语言 蓝桥杯 算法训练 二进制数数
首先我们来看到题目:
首先我们先考虑如何将十进制的数字转化成二进制,假设将10转化为二进制,而10的二进制是1010,对他进行取模处理分别得到每一位,如图:
由此便得到10的二进制
但本题只需要计算二进制中1的个数,那我们只需要判断是否为1。
#include<stdio.h>
void statistics(int n, int* p)
{
while (1)
{
if ((n % 2) == 1)//判断是否为1
++*p;//对count中的数据进行++操作
if ((n /= 2) == 0)
break;
}
}
int main()
{
int L, R;
int count = 0;//count用来计算1的数量
int*p = &count;//通过指针改变count内的数字
scanf("%d %d", &L, &R);
for (int i = L; i <= R; i++)
{
statistics(i, p);
}
printf("%d\n", *p);
return 0;
}