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