题目:不要62
思路:数位dp
代码:
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define maxn 1000000
#define read(x) scanf("%d",&x)
int n,m;
int a[10];
int dp[10][2];
int dfs(int len,int stt,int limit) {
if(!len) return 1;
if(!limit&&(~dp[len][stt])) return dp[len][stt];
int up=9;
if(limit) up=a[len];
dp[len][stt]=0;
for(int i=0;i<=up;i++) {
if(i==4) continue;
if(i==2&&stt) continue;
dp[len][stt]+=dfs(len-1,(6==i),(limit&&i==up));
}
int ans=dp[len][stt];
if(limit) dp[len][stt]=-1;
return ans;
}
int slv(int x) {
memset(dp,-1,sizeof(dp));
int len=0;
while(x) {
a[++len]=x%10;
x/=10;
}
int ans=dfs(len,0,true);
return ans;
}
int main() {
while((~read(n))&&(~read(m))&&n&&m) {
printf("%d\n",slv(m)-slv(n-1));
}
return 0;
}