题意:给你n,让你求1到n中有多少个数字,它的每位不能为3和6.
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<iostream>
#include<algorithm>
using namespace std;
#define ll long long
ll h[30];
char s[30];
int len,num[30];
ll dfs(int k,int jg){
if(k==-1)return 1;
if(h[k]!=-1&&!jg)return h[k];
int tmp=jg?num[k]:9;
ll tans=0;
for(int i=0;i<=tmp;i++){
if(i==3||i==6)continue;
tans+=dfs(k-1,jg&&(i==tmp));
}
if(!jg)h[k]=tans;
return tans;
}
int main(){
int i,j;
memset(h,-1,sizeof(h));
while(scanf("%s",s)!=EOF){
int len=strlen(s);
for(i=len-1,j=0;i>=0;i--,j++)num[j]=s[i]-'0';
ll ans=dfs(len-1,1);
printf("%lld\n",ans-1);
}
return 0;
}