标签:
1 100 0 0
80
#include<stdio.h> #include<string.h> int dp[10][3]; void init() { dp[0][2]=1; dp[0][0]=dp[0][1]=0; for(int i=1;i<10;i++) { dp[i][0]=dp[i-1][0]*10+dp[i-1][1]+dp[i-1][2]; dp[i][1]=dp[i-1][2]; dp[i][2]=dp[i-1][2]*9-dp[i-1][1]; } } int n,m; int solve(int n) { int bit[10],len=0; int temp=n; while(n) { bit[++len]=n%10; n/=10; } bit[len+1]=0; int flag=0,ans=0,i; for(i=len;i>=1;i--) { ans+=dp[i-1][0]*bit[i]; if(flag) { ans+=dp[i-1][2]*bit[i]; } if(!flag&&bit[i]>4) { ans+=dp[i-1][2]; } if(!flag&&bit[i]>6) { ans+=dp[i-1][1]; } if(!flag&&bit[i+1]==6&&bit[i]>2) { ans+=dp[i][1]; }; if(bit[i]==4||(bit[i]==2&&bit[i+1]==6)) flag=1; } if(flag) ans++; return temp-ans; } int main() { int i,j; init(); while(scanf("%d%d",&n,&m)!=EOF,n||m) { //if() printf("%d\n",solve(m)-solve(n-1)); } }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/yu_ch_sh/article/details/47124627