int a[20];// 每一位的上限
int dp[20][20]; //记忆化
int dfs(int pos,int prev,int limit)
{// 当前第几位 数位条件 是否受上限
int i;
if(pos==0) return 1;
if(!limit&&dp[pos][prev] != -1) return dp[pos][prev];
int up;
int ans = 0;
up = limit?a[pos]:9;
for(i=0;i<=up;i++)
{
if(prev==6&&i==2) continue;
if(i==4) continue;
ans += dfs(pos-1,i,limit && i==up);
}
if(!limit) dp[pos][prev] = ans;
return ans;
}
int solve(int x)
{
int p = 0;
while(x)
{
a[++p] = x%10;
x /= 10;
}
return dfs(p,0,1);
}