Pagini recente » Cod sursa (job #61774) | Cod sursa (job #199353) | Cod sursa (job #798482) | Cod sursa (job #1031012) | Cod sursa (job #1583717)
#include <stdio.h>
#define CIF 10
int d[CIF + 1][CIF + 1];
inline void precalc(){
int i, j;
d[0][0] = 1;
for(i = 1; i <= CIF; i++){
for(j = 0; j <= CIF; j++){
d[i][j] += (CIF - 1) * d[i - 1][j];
if(j != 0)
d[i][j] += d[i - 1][j - 1];
}
}
}
inline int solve(int x, int c, int k){
int p = 1, n = 0, s = 0, rez = 0;
while(p <= x / 10){
p *= 10;
n++;
}
for(; n >= 0; n--){
if(c < x / p)
rez += x / p * d[n][k - s] + d[n][k - s - 1];
else
rez += (x / p + 1) * d[n][k - s];
if(c == x / p)
s++;
x %= p;
p /= 10;
}
return rez;
}
int main(){
precalc();
FILE *in = fopen("cifre.in", "r");
int a, b, c, k;
fscanf(in, "%d%d%d%d", &a, &b, &c, &k);
a--;
int rez = solve(b, c, k) - solve(a, c, k);
FILE *out = fopen("cifre.out", "w");
fprintf(out, "%.4lf", 1.0 * rez / (b - a));
fclose(out);
return 0;
}