hkhv学长最近对二进制数很感兴趣,喜欢一切0和1组成的数。现在有一个十进制整数n,问你1到n之间有多少个数是只有0和1组成的类似二进制的数,输出他们的个数。
Input
输入数据包含一个数n (1 <= n <=10^9). Output 输出1到n中类似二进制的数的个数. Sample Input 10 Sample Output 2 Hint 对于n = 10,1 和 10是类似二进制的数.这里是引用
题意:
找出小于n的所有数中仅由0和1构成的数的数量。
思路:
dfs递归,用0和1填10位数,所得数在0-n范围内的统计个数
#include<iostream>
#include <bits/stdc++.h>
using namespace std;
int n,ans;
void dfs(int v,int d){//d是位数
if(d == 0){
if(v<=n && v>0)
ans++;
return ;
}
dfs(v*10,d-1);//递归
dfs(v*10+1,d-1);
}
int main(){
while(~scanf("%d",&n)){
ans=0;
dfs(0,10);
printf("%d\n",ans);
}
}