#include<bits/stdc++.h>
using namespace std;
int dp[
11][
10],n,m;
void init(){
//dp[i][j]:i位的数,最高位是j
dp[
0][
0]=
1;
for(
int i=
1;i<=
7;i++
)
for(
int j=
0;j<
10;j++
)
for(
int k=
0;k<
10;k++
)
if(j!=
4 && !(j==
6 && k==
2))
dp[i][j]+=dp[i-
1][k];
}
int solve(
int n){
//求[0,n)范围合法的个数
int res=
0,len=
0,d[
11]=
{};
while(n)d[++len]=n%
10,n/=
10;
d[len+
1]=
0;
for(
int i=len;i>=
1;i--){
//从高到低枚举每位
for(
int j=
0;j<d[i];++j)
//枚举最高位的数
if(d[i+
1]!=
6 || j!=
2)
res+=
dp[i][j];
if(d[i]==
4 || d[i+
1]==
6 && d[i]==
2)
break;
//后面的都不用枚举了
}
return res;
}
int main(){
init();
while(cin>>n>>m,m)cout<<solve(m+
1)-solve(n)<<
endl;
}
转载于:https://www.cnblogs.com/zsben991126/p/10675834.html