给定一个正整数n,求出0到n中有几个数满足其二进制表示不包含连续的1。1<=n<=10^9。
样例:
输入:5, 输出:5。
由于0到5的二进制表示分别为: 0; 1; 10; 11; 100; 101。 这六个数中,只有3的二进制表示包含有连续的1,故答案为5。
问题:
若输入为6144,则输出为
6144=>1100000000000,后面11个0。需要判断小于6144而不重复的1的元素的个数,故把最高位分为三种情况:00,01,10。由此可知00的个数与10的个数一样————转为后面11位不连续出现1的情况,考虑1出现的个数得到结果为:C_11^0+C_11^1+C_10^2+C_9^3+C_8^4+C_7^5+C_6^6=233;而01情况————转为后面10位不连续出现1的情况,考虑1出现的个数得到结果为:C_10^0+C_10^1+C_9^2+C_8^3+C_7^4+C_6^5=144。
最终结果为:233+233+144=610