Pagini recente » Cod sursa (job #43766) | Cod sursa (job #456216) | Cod sursa (job #2504017) | Cod sursa (job #1512898) | Cod sursa (job #82212)
Cod sursa(job #82212)
program cifre;
const
fin='cifre.in';
fout='cifre.out';
var
d,z,a,b,c,k,i,j,n,x,y:longint;
function f(x:longint):longint;
var
s,lg,a,b,nr,i:longint;
st,aa:array[1..10] of longint;
procedure back(num:integer);
var
x,i:longint;
begin
if (num=lg+1)and(nr>=k) then
begin
x:=1;
for i:=1 to lg do
x:=x*st[i];
inc(s,x);
end
else if (num<lg+1) then
begin
inc(nr);
if aa[num]>=c then
begin
st[num]:=1;
back(num+1);
end;
dec(nr);
st[num]:=aa[num]+1;
if aa[num]>=c then
dec(st[num]);
back(num+1);
end;
end;
begin
if x<>-1 then
begin
a:=x;lg:=0;
while a>0 do
begin
a:=a div 10;
inc(lg);
end;
for i:=lg downto 1 do
begin
aa[i]:=x mod 10;
x:=x div 10;
end;
s:=0;nr:=0;
back(1);
f:=s;
end
else
begin
if ((k=0)or(k=1))and(c=0) then
f:=1
else
f:=0;
end;
end;
begin
assign(input,fin);
reset(input);
readln(a,b,c,k);
close(input);
assign(output,fout);
rewrite(output);
x:=(f(b)-f(a-1));
y:=(b-a+1);
d:=x div y;
z:=(trunc((x/y)*10000))-d;
writeln(d,'.',z);
close(output);
end.