简单题
bool six保存上一位是不是6
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
#define ll __int64
using namespace std;
int dp[15][2],num[15],n,m;
int dfs(int len,bool six,bool flag)
{
if(len<0) return 1;
if(!flag&&dp[len][six]!=-1) return dp[len][six];
int p=flag?num[len]:9;
int ans=0,i;
for(i=0;i<=p;i++)
{
if(i==4||(i==2&&six))
continue;
ans+=dfs(len-1,i==6,flag&&i==p);
}
if(!flag) dp[len][six]=ans;
return ans;
}
int cal(int x)
{
int l=0;
while(x)
{
num[l++]=x%10;
x/=10;
}
return dfs(l-1,0,1);
}
int main()
{
memset(dp,-1,sizeof dp);
while(scanf("%d%d",&n,&m)&&(n||m))
{
printf("%d\n",cal(m)-cal(n-1));
}
return 0;
}
原文:http://blog.csdn.net/u011032846/article/details/19012397