数位dp:
代码:
#include <cstdlib>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
int f[15][2], bit[15];
int dfs(int p, int s, int e) {
if (p == -1) {
return 1;
}
if (!e && ~f[p][s]) return f[p][s];
int res = 0;
int u = e ? bit[p] : 9;
for (int i = 0; i <= u; ++i) {
if(i==4||(i==2&&s)) {
continue;
}
res += dfs(p-1,i==6, e&&i==u);
}
return e ? res : f[p][s] = res;
}
int cal(int x) {
int idx = 0;
while (x) {
bit[idx++] = x % 10;
x /= 10;
}
return dfs(idx-1, 0, 1);
}
int main() {
int T, l, r;
memset(f, 0xff, sizeof (f));
while (scanf("%d %d", &l, &r)) {
if(r==0&&l==0) {
break;
}
printf("%d\n", cal(r) - cal(l-1));
// for (int i = 0; i < 10; ++i) {
// printf("%d ", f[i][3]);
// }
// puts("");
}
return 0;
}