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.
题意:查找1-n中有多少数仅由0和1组成
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<list>
#include<queue>
#include<vector>
using namespace std;
const int maxn=10010;
long long ans=0;
void dfs(long long n,long long num,long long cnt){
if(num>n)return ;
if(cnt==0){
ans++;return ;
}
dfs(n,num*10+1,cnt-1);dfs(n,num*10,cnt-1);
}
int main()
{
long long i,j,k,n;
scanf("%lld",&n);
long long temp=n;int cnt=0;
while(temp){
temp/=10;cnt++;
}
for(i=1;i<cnt;++i){
ans=ans+(1<<(i-1));
}
dfs(n,1,cnt-1);
printf("%lld\n",ans);
return 0;
}