样例:
输入:5 输出:5
0 01 10 100 101满足,11不满足。
那么6144呢?
答案是610,怎么去计算呢?
思路:查找从0到n中有多少个数包含连续的1,然后在总数中去掉这些情况,得到的就是结果。
请看下面求解的代码:
#include <stdio.h>
int cnt = 0;
void fun(int m)
{
int flag = 0;
while(m)
{
if(m % 2)//第一次判断是否为1
{
flag = 1;
m /= 2;
if(m % 2)//第二次判断是否有连续的1
{
cnt++;
break;
}
}
else
m /= 2;
}
}
void findtime(int n)
{
int i;
for(i = 2; i <= n; i++)//可能包含连续1的数
{
fun(i);//查找是否包含连续1
}
}
int main()
{
int m;
scanf("%d",&m);
findtime(m);
printf("%d\n",m - cnt + 1);
}