dfs打表,记录1e9内的满足条件的幸运数;

#include<bits/stdc++.h>
using namespace std;
#define int long long
const int maxn=1e6+10;
int cnt=0,rec[maxn];
void dfs(int x)
{
    if(x>444444444) return;
    rec[cnt++]=x*10+4;
    rec[cnt++]=x*10+7;
    dfs(x*10+4);
    dfs(x*10+7);
}
signed main()
{
    int l,r;
    cin>>l>>r;
    dfs(0);
    sort(rec,rec+cnt);
    int ans=0;
    int i=lower_bound(rec,rec+cnt,l)-rec;//找出左界
    int j=upper_bound(rec,rec+cnt,r)-rec;//右界
   for(int k=i;k<=j;k++)
   {
       ans=ans+(min(rec[k],r)-l+1)*rec[k];
       l=rec[k]+1;
   }
    cout<<ans;
}