RT.
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; long long t,n,bit[22],ret=0,dp[22][10][2]; void get_bit(long long x) { ret=0; while (x) {bit[++ret]=x%10;x/=10;} } long long dfs(long long pos,long long pre,bool flag1,long long flag2) { if (!pos) return flag1; if ((!flag2) && (~dp[pos][pre][flag1])) return dp[pos][pre][flag1]; long long ans=0,up=flag2?bit[pos]:9; for (long long i=0;i<=up;i++) ans+=dfs(pos-1,i,flag1|((pre==4) && (i==9)),flag2&&i==up); if (!flag2) dp[pos][pre][flag1]=ans; return ans; } int main() { memset(dp,-1,sizeof(dp)); scanf("%lld",&t); for (long long i=1;i<=t;i++) { scanf("%lld",&n); get_bit(n);printf("%lld\n",dfs(ret,0,0,1)); } return 0; }