简单题
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