func_code_string: #include <bits/stdc++.h>   using namespace std;   vector<long long> g;   long long from, to;   void recurse(long long n) {     if (n > to) return;     if (n >= from && n <= to) {       g.push_back(n);     }     recurse(n * 10 + 4);     recurse(n * 10 + 7);   }   long long get(long long f, long long t, long long ff, long long tt) {     if (ff > t || tt < f) return 0;     ff = max(ff, f);     tt = min(t, tt);     return tt - ff + 1;   }   int main() {     long long pl, pr, vl, vr, k;     cin >> pl >> pr >> vl >> vr >> k;     from = min(pl, vl), to = max(pr, vr);     recurse(4);     recurse(7);     sort(g.begin(), g.end());     double res = 0.0;     if ((int)g.size() < k) {       puts( 0.0 );       return 0;     }     long long total = 0;     long long x, y, p, q, r, s;     long long denom;     denom = (pr - pl + 1) * (vr - vl + 1);     int i, j, sz = g.size();     i = 0;     j = i + k - 1;     while (1) {       if (i == 0)         p = from;       else         p = g[i - 1] + 1;       q = g[i];       r = g[j];       if (j + 1 < (int)g.size())         s = g[j + 1] - 1;       else         s = to;       x = get(pl, pr, p, q);       y = get(vl, vr, r, s);       total = x * y;       x = get(pl, pr, r, s);       y = get(vl, vr, p, q);       total += x * y;       int chk = 0;       if (g[i] >= max(pl, p)) chk++;       if (g[i] <= max(pr, q)) chk++;       if (g[i] >= max(vl, r)) chk++;       if (g[i] <= max(vr, s)) chk++;       if (g[i] >= max(pl, r)) chk++;       if (g[i] <= max(pr, s)) chk++;       if (g[i] >= max(vl, p)) chk++;       if (g[i] <= max(vr, q)) chk++;       if (chk == 8) {         total--;       }       res += (total * 1.0 / denom);       i++;       j = i + k - 1;       if (i >= sz || j >= sz) break;     }     printf( %.12lf n , res);     return 0;   }   