Pagini recente » Cod sursa (job #243750) | Cod sursa (job #1836568) | Cod sursa (job #2039463) | Cod sursa (job #2981128) | Cod sursa (job #1703280)
#include <cstdio>
using namespace std;
const int s = 10000;
int i,x, K,A,B,C, ans=0;
int power_nine[]={1,9,81,729,9*729};
int comb[7][7];
inline int cifre(int x)
{
int cnt=0;
if(!C && !x) return 1;
while(x)
{
if(x%10==C) ++cnt;
x/=10;
}
return cnt;
}
int main()
{
freopen("cifre.in", "r", stdin);
freopen("cifre.out", "w", stdout);
scanf("%d%d%d%d", &A, &B, &C, &K);
ans=0;
comb[4][0]=comb[4][4]=1;
comb[4][1]=comb[4][3]=4;
comb[4][2]=6;
for(i=A; (i%s!=0 || i<s) && i<=B; ++i)
ans += (cifre(i)>=K);
for(; i+s<=B; i+=s)
{
x = K - cifre(i/s);
if(x<0) x=0;
while(x<=4) ans += comb[4][x]*power_nine[4-x], ++x;
}
for(; i<=B; ++i)
ans += (cifre(i)>=K);
long double z=(double)ans/(B-A+1);
printf("%.10Lf\n", z);
return 0;
}