题目分析:
Code:
#include <bits/stdc++.h>
using namespace std;
#define LL long long
#define re register
int n,m,a[15];
LL f[15][2][2];
LL dfs_(int pos,int six,int flag) {
if(pos<=0) return 1;
if(~f[pos][six][flag]) return f[pos][six][flag];
LL ans=0;
for(re int i=0;i<=9;++i) {
if(flag&&i>a[pos]) break;
if(i==4) continue;
if(six&&i==2) continue;
ans+=dfs_(pos-1,i==6,flag&&i==a[pos]);
}
return f[pos][six][flag]=ans;
}
inline LL solve_(int x) {
if(x<0) return 0;
memset(f,-1,sizeof(f));
memset(a,0,sizeof(a));
int cnt=0;
while(x) {
a[++cnt]=x%10;
x/=10;
}
return dfs_(cnt,0,1);
}
void readda_() {
while(scanf("%d%d",&n,&m)!=EOF) {
if(!n&&!m) return;
printf("%lld\n",solve_(m)-solve_(n-1));
}
}
int main() {
readda_();
return 0;
}