您的位置:首页 > 其它

1的数目_扩展问题

2013-04-02 16:22 190 查看
扩展问题:给定二进制数N,写下从1开始到N的所有二进制数,数一下其中出现的所有“1”的个数:
     f(1)=1
f(10)=10 (因为01,10,有两个1)
f(11)=100 (因01,10,11,有四个1)
解答:考虑f(1011):1,10,11,100,101,110,111,1000,1001,1010,1011
第一位上:高位数为101,每两个数就出现一个1,则出现101个1;且current位为1,低位数为0,所以5+1=6
     第二位上:高位数为10,每四个数出现一个1,则出现(10)*2=4个1;且current位为1,低位数为1,所以4+1+1=6
     第三位:高位数为1,出现(1)*2^2=4个1;且current位为0,低位数为11;所以4+0=4
   第四位:高位数为0,,current位为1,低位数为011;所以为 低位数+1=4
通过观察发现在 current==1 时,第n位上出现1的次数 = 高位数*2^n-1 +低位数+1
       current==0 时,第n位上出现1的次数 = 高位数*2^n-1

附:

十进制二进制最右边1的个数总和倒数第二1的个数总和 倒数第三1的个数总和倒数第四1的个数总和倒数第五1的个数总和十进制二进制最右边1的个数总和倒数第二1的个数总和倒数第三1的个数总和倒数第四1的个数总和倒数第五1的个数总和
00000000000130110176660
10000110000140111077770
20001011000150111188880
30001122000161000088881
40010022100171000198882
50010132200181001099883
6001103330019100111010884
7001114440020101001010985
80100044410211010111101086
90100154420221011011111187
100101055430231011112121288
110101166440241100012121299
12011006655025110011312121010
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: