简单题
bool six保存上一位是不是6
#include #include #include #include #include #include #include #include #include #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; }