区间[l,r]中有多少个正整数既不含"4"又不含"62”?
#include <iostream>
using namespace std;
typedef unsigned long long u64;
u64 f[30];
u64 g[30];
u64 h[30];
u64 solve(u64 n){
n++;
int a[30]={0};
int len=0;
while(n){
a[++len]=n%10;
n/=10;
}
u64 ans=0;
int flag=0;
for(int i=len;i>0;--i){
ans+=a[i]*f[i-1];
if(flag){
ans+=a[i]*g[i-1];
}else{
if(a[i]>4)ans+=g[i-1];
if(a[i]>6)ans+=h[i-1];
if(a[i+1]==6 && a[i]>2)ans+=h[i];
}
if(a[i+1]==6 && a[i]==2 || a[i]==4){
flag=1;
}
}
return ans;
}
int main(){
f[0]=0;
g[0]=1;
h[0]=0;
for(int i=1;i<=20;++i){
f[i]=f[i-1]*10+g[i-1]+h[i-1];
g[i]=g[i-1]*10-g[i-1]-h[i-1];
h[i]=g[i-1];
}
u64 l,r;
while((cin>>l>>r),(l&&r)){
u64 ans=solve(r)-solve(l-1);
cout<<r-(l-1)-ans<<endl;
}
return 0;
}