昨天找出来的二进制数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;
}