Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!
View Code
 1 #include <cstdio>
 2 #include <cstring>
 3 using namespace std;
 4 
 5 int dp[10][3];
 6 void getdp()
 7 {
 8     memset(dp,0,sizeof(dp));
 9     dp[0][0]=1;
10     for(int i=1;i<=6;i++)
11     {
12         dp[i][0]=dp[i-1][0]*9-dp[i-1][1];
13         dp[i][1]=dp[i-1][0];
14         dp[i][2]=dp[i-1][2]*10+dp[i-1][0]+dp[i-1][1];
15     }
16 }
17 int f(int n)
18 {
19     int d[10],len=0;
20     for(int x=n;x;x/=10) d[len++]=x%10;
21     d[len]=0;
22     int ans=0;
23     bool flag=false;
24     for(int i=len-1;i>=0;i--)
25     {
26         ans+=dp[i][2]*d[i];
27         if(flag) {ans+=dp[i][0]*d[i]; continue;}
28         if(d[i]>4) ans+=dp[i][0];
29         if(d[i+1]==6 && d[i]>2) ans+=dp[i+1][1];
30         if(d[i]>6) ans+=dp[i][1];
31         if(d[i]==4 || (d[i+1]==6 && d[i]==2)) flag=true;
32     }
33     return n-ans;
34 }
35 int main()
36 {
37     getdp();
38     int n,m;
39     while(scanf("%d%d",&n,&m),n||m)
40     {
41         int ans=f(m+1)-f(n);
42         printf("%d\n",ans);
43     }
44     return 0;
45 }

 

 

posted on 2012-11-06 23:24  Qiuqiqiu  阅读(575)  评论(0编辑  收藏  举报