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; }