算法训练 二进制数数( 给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。   如5的二进制为101,包含2个“1”。)

算法训练 二进制数数

问题描述

给定L,R。统计[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
  如5的二进制为101,包含2个“1”。
输入格式
  第一行包含2个数L,R
输出格式
  一个数S,表示[L,R]区间内的所有数在二进制下包含的“1”的个数之和。
样例输入
2 3
样例输出
3
数据规模和约定
  L<=R<=100000;

思路

简单题,我的想法是用一个函数将一个十进制数转换成二进制数,再用一个函数判断这个二进制数中有多少个1,定义全局变量进行累加。

代码呈上:

#include <stdio.h>
int sum=0;
int len;
void fun(int a[1000],int len)
{
    
    
	int i=0;
	for(i=0;i<len;i++)
	{
    
    
		if(a[i]==1)
			sum++;
	}
} 

void change(int n)
{
    
    
	int a[1000];
	int i=0;
	while(n>0)
	{
    
    
		a[i]=n%2;
		n/=2;
		i++;
	}
	fun(a,i);
}

int main()
{
    
    
	int L,R;
	scanf("%d %d",&L,&R);
	int i;
	for(i=L;i<=R;i++)
	{
    
    
		change(i);
	}
	printf("%d",sum);
	return 0;
}

运行示例
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45281807/article/details/105803025