1 100 0 0
80
AC代码如下:
#include<iostream> #include<cstring> using namespace std; int dp[10][3]; int SW(int a) { int num[10]; int i; memset(num,0,sizeof num); int l=1; int ans=a; while(a) { num[l++]=a%10; a/=10; } int flag=0; for(i=l-1;i>=1;i--) { ans-=dp[i-1][2]*num[i]; if(flag) ans-=dp[i-1][0]*num[i]; else { if(num[i]>4) ans-=dp[i-1][0]; if(num[i]>6) ans-=dp[i-1][1]; if(num[i+1]==6&&num[i]>2) ans-=dp[i][1]; } if((num[i+1]==6&&num[i]==2)||num[i]==4) flag=1; } return ans; } int main() { int n,m; int i,j; memset(dp,0,sizeof dp); dp[0][0]=1; for(i=1;i<=8;i++) { dp[i][0]=9*dp[i-1][0]-dp[i-1][1]; dp[i][1]=dp[i-1][0]; dp[i][2]=10*dp[i-1][2]+dp[i-1][0]+dp[i-1][1]; //cout<<dp[i][0]<<" "<<dp[i][1]<<" "<<dp[i][2]<<endl; } while(cin>>n>>m) { if(n==0&&m==0) break; cout<<SW(m+1)-SW(n)<<endl; } return 0; }
原文:http://blog.csdn.net/hanhai768/article/details/37760335