题目连接
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Max 1000
using namespace std;
int a[20];
int dfs(int pos,int six, int limit)
{
int re = 0;
if(pos == -1)return 1 ;
int up;
up = limit?a[pos]:9;
for(int i = 0;i <= up;i++)
{
if(i == 4||(six && i == 2))continue;
else re+= dfs(pos-1, i==6, limit&&a[pos] == i);
}
return re;
}
int solve(int x)
{
int len = 0;
while(x)
{
int m = x%10;
x/=10;
a[len++] = m;
}
return dfs(len-1, false, true);
}
int main()
{
int n, m;
while(cin>>n>>m&&(n|| m))
{
cout<<solve(m)- solve(n-1)<<endl;
}
return 0;
}
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define Max 1000
using namespace std;
int a[20];
int dp[20][2][2];
int dfs(int pos,int six, int limit)
{
if(pos == -1)return 1 ;
if(dp[pos][six][limit]!= -1) return dp[pos][six][limit];
int re = 0;
int up;
up = limit?a[pos]:9;
for(int i = 0;i <= up;i++)
{
if(i == 4||(six && i == 2))continue;
else re+= dfs(pos-1, i==6, limit&&a[pos] == i);
}
return dp[pos][six][limit] = re;
}
int solve(int x)
{
memset(dp , -1, sizeof(dp));
int len = 0;
while(x)
{
int m = x%10;
x/=10;
a[len++] = m;
}
return dfs(len-1, false, true);
}
int main()
{
int n, m;
while(cin>>n>>m&&(n|| m))
{
cout<<solve(m)- solve(n-1)<<endl;
}
return 0;
}