板子改动一点就行了
C++ 代码
#include<bits/stdc++.h>
using namespace std;
long long dp[13][13][13][2][2][2];//dp[pos][u][v][state][n4][n8]
long long num[13];
long long dfs(int pos,int u,int v,bool state,bool n4,bool n8,bool limit){
long long ans=0;
if(n4&&n8)return 0;
if(!pos)return state;
if(!limit&&dp[pos][u][v][state][n4][n8]!=-1)return dp[pos][u][v][state][n4][n8];
int up=limit?num[pos]:9;
for(int i=0;i<=up;i++){
ans+=dfs(pos-1,v,i,state||(i==u&&i==v),i==4||n4,i==8||n8,limit&&(i==up));
}
if(!limit)dp[pos][u][v][state][n4][n8]=ans;
return ans;
}
long long solve(long long x){
int len=0;
while(x){
num[++len]=x%10;
x/=10;
}
if(len!=11)return 0;
memset(dp,-1,sizeof dp);
long long ans=0;
for(int i=1;i<=num[len];i++){
ans+=dfs(len-1,0,i,0,i==4,i==8,i==num[len]);
}
return ans;
}
int main(){
long long a,b;
cin>>a>>b;
//cout<<solve(b)<<" "<<solve(a-1)<<endl;
cout<<solve(b)-solve(a-1);
return 0;
}