摘要:
问题:给定一个十进制数N,写下从1开始,到N的所有二进制数,然后数一下其中出现的所有“1”的个数。
首先我们看2,、4、8、16四个数,2的二进制数总共有2个1,4的有5个,8的有13个,16有33个。而且他们都有一定的规律。比如16是2的4次方,二进制数是10000,在最右边1的个数和倒数第二、第三、第四都是8(即4个8),最高位是1;8是2的3次方,二进制数是01000,在最右边1的个数和倒数第二、第三都是4(3个4),倒数第四个是1;以此类推4和2,那么我们可以看出符合这样的公式:
0~2^n的所有二进制数1的总和sum=2^(n-1)*n+1 其中2^n表示2的n次方 阅读全文