TREENUM - Tree Num
Tác giả: ll931110
Ngôn ngữ: Pascal
{$MODE DELPHI}
Program TREENUM;
Const
input = '';
output = '';
maxk = 63;
kmod = 100000000;
Var
fi,fo: text;
t,i: integer;
n: qword;
d2: array[0..maxk] of qword;
d3: array[0..maxk,1..5] of integer;
d: array[1..5] of integer;
s: array[1..maxk] of integer;
Procedure openfile;
Begin
Assign(fi, input);
Reset(fi);
Assign(fo, output);
Rewrite(fo);
End;
Procedure gens;
Var
i,j: integer;
Begin
d2[0]:= 1;
For i:= 1 to maxk do d2[i]:= d2[i - 1] * 2;
Fillchar(d3, sizeof(d3), 0);
d3[0,1]:= 1;
For i:= 1 to maxk do
Begin
For j:= 1 to 4 do d3[i,j]:= d3[i - 1,j] * 3;
For j:= 1 to 4 do if d3[i,j] >= kmod then
Begin
d3[i,j + 1]:= d3[i,j + 1] + d3[i,j] div kmod;
d3[i,j]:= d3[i,j] mod kmod;
End;
End;
End;
Procedure solve;
Var
num,i,j,k: integer;
Begin
num:= 0;
For i:= maxk downto 0 do if n >= d2[i] then
Begin
inc(num);
s[num]:= i;
n:= n - d2[i];
End;
Fillchar(d, sizeof(d), 0);
For i:= 1 to num do
Begin
k:= s[i];
For j:= 1 to 4 do d[j]:= d[j] + d3[k,j];
For j:= 1 to 4 do if d[j] >= kmod then
Begin
d[j + 1]:= d[j + 1] + d[j] div kmod;
d[j]:= d[j] mod kmod;
End;
End;
End;
Procedure printresult;
Var
st: string;
i,j,k: integer;
Begin
k:= 4;
While d[k] = 0 do dec(k);
Write(fo, d[k]);
For i:= k - 1 downto 1 do
Begin
str(d[i], st);
For j:= length(st) + 1 to 8 do write(fo, 0);
Write(fo, st);
End;
Writeln(fo);
End;
Procedure closefile;
Begin
Close(fo);
Close(fi);
End;
Begin
openfile;
gens;
Readln(fi, t);
For i:= 1 to t do
Begin
Readln(fi, n);
solve;
printresult;
End;
closefile;
End.