hdu 2502

昨天找出来的二进制数1出现的规律今天又遇到这样的题

 

0位上每2个数后1个数有1,,即奇数

1位上每4个数后2个有1,

2位上每8个数后4个有1,.......

。。。。。。。。。。。。。。

 




 

#include<stdio.h>

int a[21],b[21];

int find(int n)//0到n共出现多少个1

{

	int i;

	n=n+1;

	int sum=0;

	int temp=1;

	for(i=1;i<=n;i++)

	{

		if(temp>n)break;

		temp*=2;

		sum+=(n/temp)*(temp/2);

		if(n%temp>temp/2)

			sum+=n%temp-(temp/2);

	}

 return sum;

}

int main()

{

   int i,j,k,n,m,t;

   a[0]=1;

   for(i=1;i<=20;i++)

	   a[i]=a[i-1]*2;

   scanf("%d",&t);

   while(t--)

   {

	 scanf("%d",&n);

     printf("%d\n",find(a[n])-find(a[n-1]));

   }

   return 0;

}


 

 

你可能感兴趣的:(HDU)