One beautiful July morning a terrible thing happened in Mainframe: a mean virus Megabyte somehow got access to the memory of his not less mean sister Hexadecimal. He loaded there a huge amount of n different natural numbers from 1 to n to obtain total control over her energy.
But his plan failed. The reason for this was very simple: Hexadecimal didn't perceive any information, apart from numbers written in binary format. This means that if a number in a decimal representation contained characters apart from 0 and 1, it was not stored in the memory. Now Megabyte wants to know, how many numbers were loaded successfully.
Input data contains the only number n (1 ≤ n ≤ 109).
Output the only number — answer to the problem.
10
2
For n = 10 the answer includes numbers 1 and 10.
给出一个十进制的数字,问不大于这个数字,且只有0和1组成的自然数有多少个?
不知道自己的英语有多差,还是看数据猜出来题意的......
1,找到小于这个数字的最大的由0和1组成的数字(想想看怎么找)
2,将找到的这个数转化为十进制,即为所求
#include<cstdio>
#include<cstring>
using namespace std;
void judge(char x[])
{
int i=0;
while(x[i]&&x[i]<'2')
{
++i;
}
while(x[i])
{
x[i++]='1';
}
}
int change(char x[])
{
judge(x);
int ans=0,base=1;
for(int i=0;x[i];++i)
{
ans=ans*2+x[i]-'0';
}
return ans;
}
int main()
{
char x[15];
scanf("%s",x);
printf("%d\n",change(x));
return 0;
}