1 //反向62 2 #include3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 typedef long long ll;10 // const int maxn = 1e5+5;11 ll n;12 ll a[100];13 ll dp[100][100];14 15 //下标,前面是否4,是否有前导0, 是否有限制16 ll dfs(ll pos, ll sta, ll pre, ll limit){17 if(pos == -1) return 1;18 if(!limit && dp[pos][sta] != -1)19 return dp[pos][sta];20 int up = limit?a[pos]:9;21 ll ans = 0;22 for(int i = 0;i <= up;i++){23 if(pre == 4 && i == 9){24 continue;25 }26 ans += dfs(pos-1, i == 4, i, limit && i == a[pos]);27 }28 if(!limit) dp[pos][sta] = ans;29 return ans;30 }31 32 ll solve(ll x){33 ll pos = 0;34 while(x){35 a[pos++] = x%10;36 x /= 10;37 }38 return dfs(pos-1, 0, -1, true);39 }40 41 int main(){42 memset(dp, -1, sizeof dp);43 int t;44 scanf("%d", &t);45 while(t--){46 scanf("%lld", &n);47 ll ans = solve(n);48 printf("%lld\n", n - ans + 1);49 }50 return 0;51 }