ll dp[20][2], a[20]; ll dfs(ll pos, ll sta, bool limit) { if (!pos) return1; if (!limit && dp[pos][sta] != -1) return dp[pos][sta]; ll up = limit ? a[pos] : 9, ans = 0; for (ll i = 0; i <= up; ++i) { if (sta && i == 2) continue;//上一位是6,当前位是2 if (i == 4) continue;//当前位是4 ans += dfs(pos - 1, i == 6, limit && i == a[pos]); } if (!limit) dp[pos][sta] = ans; return ans; } ll solve(ll x) { ll pos = 0; while (x) { a[++pos] = x % 10; x /= 10; } return dfs(pos, 0, 1); }
intmain() { ll n, m; memset(dp, -1, sizeof(dp)); while (cin >> n >> m) { if (n == m && m == 0) break; cout << solve(m) - solve(n - 1) << endl; } return0; }