调一上午了总是就WA一个点

代码
#include<bits/stdc++.h>
using namespace std;
int len,a[12];
long long L,R,dp[11][11][11][2][2][2][2];
long long dfs(int pos,int p1,int p2,bool t,bool limit,bool _4,bool _8){
if(_4&&_8) return 0;
if(pos<=0) return t;
long long &v=dp[pos][p1][p2][t][limit][_4][_8];
if(~v) return v;
long long res=0;
int now=limit?a[pos]:9;
for(int i=0;i<=now;i++){
if(pos==len&&!i) continue;
res+=dfs(pos-1,i,p1,t||(i==p1&&i==p2),limit&&(i==now),_4||i==4,_8||i==8);
}
if(!limit) v=res;
return res;
}
long long search(long long x){
if(x<1e10) return 0;
memset(dp,-1,sizeof dp);
for(len=0;x;x/=10) a[++len]=x%10;
return dfs(len,-1,-1,0,1,a[len]==4,a[len]==8);
}
int main(){
scanf("%lld%lld",&L,&R);
return printf("%lld\n",search(R)-search(L-1)),0;
}