TCDFZ - Chữ số tận cùng khác 0
Tác giả: RR
Ngôn ngữ: Pascal
var
nn,i,n,res,lt2,lt5:longint;
t1:array[0..10] of longint;
function powInFac(n,k:longint):longint;
begin
if n<k then exit(0);
exit(n div k+powInFac(n div k,k));
end;
function power(a,k:longint):longint;
var
mid:longint;
begin
if k=0 then exit(1);
if k=1 then exit(a);
mid:=power(a,k shr 1);
mid:=(mid*mid) mod 10;
if k and 1=0 then exit(mid)
else exit((mid*a) mod 10);
end;
function get(n:longint):longint;
var
res:longint;
begin
res:=1;
while (n>0) do
begin
res:=(res*power(t1[9],n div 10)*t1[n mod 10]) mod 10;
n:=n shr 1;
end;
exit(res);
end;
begin
t1[0]:=1;
for i:=1 to 9 do
if (i and 1=1) and (i<>5) then t1[i]:=t1[i-1]*i
else t1[i]:=t1[i-1];
read(n); nn:=n;
lt2:=powInFac(n,2);
lt5:=powInFac(n,5);
res:=power(2,lt2-lt5);
res:=(res*get(n)) mod 10;
n:=nn div 5;
while (n>0) do
begin
res:=(res*get(n)) mod 10;
n:=n div 5;
end;
writeln(res);
end.