EDIT: This answer contains 3 versions, the first one based on my misunderstanding of the approach given above, and the second one is (I hope) a more correct interpretation. The third version allows conversions for bases up to base 36(!) (but restricted to the range of numbers for the pgfmath
engine, i.e., 0-16383).
The first one:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\newcount\total
\newcount\lasttotal
\newcount\targetbase
\def\basetenconversiontable#1#2{%
\begin{tikzpicture}[every node/.style={minimum width=1cm, minimum height=0.5cm}, x=1cm,y=0.5cm]
%
\total=#1%
\targetbase=#2
\def\newnumber{}
%
\pgfmathloop
\ifnum\total<1
\else
%
\ifnum\pgfmathcounter>1
\node at (\pgfmathcounter, -\pgfmathcounter+1) (tmp) {\the\targetbase};
\draw (tmp.north west) |- (tmp.south east);
%
\node at (\pgfmathcounter-1, -\pgfmathcounter) (tmp) {\pgfmathparse{int(\total*\targetbase)}\pgfmathresult};
\draw (tmp.south west) -- (tmp.south east);
%
\pgfmathparse{int(\lasttotal-\total*\targetbase)}%
\let\digit=\pgfmathresult
\node at (\pgfmathcounter-1, -\pgfmathcounter-1) [text=red] {\digit};
\edef\newnumber{\digit\newnumber}
\fi
%
\ifnum\total<\targetbase
\edef\newnumber{\the\total\newnumber}
\node at (\pgfmathcounter, -\pgfmathcounter) [text=red] {\the\total};
\else
\node at (\pgfmathcounter, -\pgfmathcounter) {\the\total};
\fi
\lasttotal=\total
\divide\total by\targetbase
\repeatpgfmathloop
\draw [->] (\pgfmathcounter-1,-\pgfmathcounter-1) -- ++(-0.5,0);
\node [anchor=west] at (1, -\pgfmathcounter-2) {$#1=\newnumber_{\the\targetbase}$};
\end{tikzpicture}
}
\begin{tabular}{c}
\basetenconversiontable{478}{7} \\
\basetenconversiontable{1362}{5} \\
\basetenconversiontable{365}{3} \\
\basetenconversiontable{637}{2}
\end{tabular}
\end{document}

The second one:
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\newcount\columntotal
\newcount\nextcolumntotal
\newcount\tmptotal
\newcount\tmptmptotal
\newcount\targetbase
\newcount\digitcount
\def\getonedigit#1#2;{#1}
\def\getndigits#1{%
\begingroup%
\tmptotal=#1
\pgfmathloop%
\ifnum\tmptotal<10%
\else%
\divide\tmptotal by10%
\repeatpgfmathloop%
\pgfmathsmuggle\pgfmathcounter%
\endgroup%
\edef\ndigits{\pgfmathcounter}%
}
\def\baseconversiontable#1#2{%
\begingroup%
\getndigits{#1}%
\pgfmathsetlengthmacro\tablecolumnwidth{\ndigits*width("$4$")}%
\def\convertednumber{}%
\begin{tikzpicture}
\node (base conversion table) {%
\begin{tikzpicture}
[
table node/.style={
text width=\tablecolumnwidth,
inner sep=0pt,
align=right,
minimum height=0.5cm,
minimum width=\tablecolumnwidth+5pt
},
x=\tablecolumnwidth+5pt,
y=0.5cm
]
\targetbase=#2
\dobaseconversiontable{#1}%
\end{tikzpicture}%
};%
\draw [->](base conversion table.south east) -- ++(-0.5,0);
\node [below, anchor=north west] at (base conversion table.south west) {$#1=\convertednumber_{#2}$};
\end{tikzpicture}
\endgroup%
}
\def\dobaseconversiontable#1{%
\columntotal=#1%
\getndigits{\columntotal}%
\tmptotal=#1%
\divide\tmptotal by\targetbase
\nextcolumntotal=\tmptotal
%
\ifnum\columntotal<\targetbase
\node at (0, 0) [table node, red] (@) {$\the\columntotal$};%
\xdef\convertednumber{\the\columntotal\convertednumber}%
\else%
\node at (1, 0) [table node] (@) {$\the\targetbase$};%
\draw (@.north west) |- (@.south east);
%
\getndigits{\tmptotal}%
\digitcount=\ndigits%
%
\node at (0,0) [table node] {$\the\columntotal$};%
\tmptmptotal=\tmptotal
\pgfmathloop
\ifnum\digitcount=0
\else%
\tmptmptotal=\tmptotal
\ifnum\digitcount>0
\tmptmptotal=\expandafter\getonedigit\the\tmptmptotal;
\fi
\pgfmathparse{int(\tmptmptotal*\targetbase*10^(\digitcount-1))}%
\let\remainder=\pgfmathresult
\pgfmathsetcount\columntotal{\columntotal-\remainder}%
\advance\digitcount by-1
\pgfmathsetcount\tmptotal{\tmptotal-\tmptmptotal*(10^\digitcount)}%
\ifnum\columntotal<\targetbase
\node at (0,-\pgfmathcounter*2) [table node, red] (@) {$\the\columntotal$};%
\xdef\convertednumber{\the\columntotal\convertednumber}%
\digitcount=0%
\else
\node at (0,-\pgfmathcounter*2) [table node](@) {$\the\columntotal$};%
\fi
\draw (@.north west) -- (@.north east);
\node at (0,-\pgfmathcounter*2+1) [table node] {$\remainder$};%
\repeatpgfmathloop%
\tikzset{shift={(1,-1)}}%
\expandafter\dobaseconversiontable\expandafter{\the\nextcolumntotal}%
\fi
}%
\begin{tabular}{c}
\baseconversiontable{478}{7}\\
\baseconversiontable{1366}{5}\\
\baseconversiontable{365}{3}\\
\baseconversiontable{711}{2}
\end{tabular}
\end{document}

Third version. I think it works correctly. It's all a teensy bit kludgy anyway.
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\newcount\columntotal
\newcount\nextcolumntotal
\newcount\tmptotal
\newcount\tmptmptotal
\newcount\targetbase
\newcount\digitcount
\def\digittoalpha#1{%
\ifcase#1\relax0\or1\or2\or3\or4\or5\or6\or7\or8\or9%
\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or k\or l\or m%
\or n\or p\or p\or q\or r\or s\or t\or u\or v\or w\or x\or y\or z\else?\fi%
}
\def\getonedigit#1#2;{#1}
\def\getndigits#1{%
\begingroup%
\tmptotal=#1
\pgfmathloop%
\ifnum\tmptotal<10%
\else%
\divide\tmptotal by10%
\repeatpgfmathloop%
\pgfmathsmuggle\pgfmathcounter%
\endgroup%
\edef\ndigits{\pgfmathcounter}%
}
\def\baseconversiontable#1#2{%
\begingroup%
\getndigits{#1}%
\pgfmathsetlengthmacro\tablecolumnwidth{\ndigits*width("$4$")}%
\gdef\convertednumber{}%
\begin{tikzpicture}
\node (base conversion table) {%
\begin{tikzpicture}
[
table node/.style={
anchor=north,
text width=\tablecolumnwidth,
inner sep=0pt,
align=right,
minimum height=0.5cm,
minimum width=\tablecolumnwidth+5pt
},
x=\tablecolumnwidth+5pt,
y=0.5cm
]
\targetbase=#2
\dobaseconversiontable{#1}%
\end{tikzpicture}%
};%
\draw [->](base conversion table.south east) -- ++(-0.5,0);
\node [below, anchor=north west] at (base conversion table.south west) {$#1=\convertednumber_{#2}$};
\end{tikzpicture}
\endgroup%
}
\def\dobaseconversiontable#1{%
\columntotal=#1%
\getndigits{\columntotal}%
\tmptotal=#1%
\divide\tmptotal by\targetbase
\nextcolumntotal=\tmptotal
%
\ifnum\columntotal<\targetbase
\edef\currentdigit{\uppercase{\digittoalpha{\the\columntotal}}}%
\ifnum\columntotal>9
\edef\currentdigit{\noexpand\rm{\currentdigit}}%
\fi
\node at (0, 0) [table node] (@) {%
\\% For some reason necessary.
\ifnum\the\columntotal<10
\color{red}$\the\columntotal$%
\else
$\the\columntotal$\\%
\tikz\draw[->](0,0)(-0.75ex,0)--++(0,-0.5);\\%
\color{red}\currentdigit%
\fi
};%
\expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter\convertednumber%
\expandafter\expandafter\expandafter{\expandafter\currentdigit\convertednumber}%
\else%
\node at (1, 0) [table node] (@) {$\the\targetbase$};%
\draw (@.north west) |- (@.south east);
%
\getndigits{\tmptotal}%
\digitcount=\ndigits%
%
\node at (0,0) [table node] {$\the\columntotal$};%
\tmptmptotal=\tmptotal
\pgfmathloop
\ifnum\digitcount=0
\else%
\tmptmptotal=\tmptotal
\ifnum\digitcount>0
\tmptmptotal=\expandafter\getonedigit\the\tmptmptotal;
\fi
\pgfmathparse{int(\tmptmptotal*\targetbase*10^(\digitcount-1))}%
% Hmm this is a kludge.
\ifnum\pgfmathresult>\columntotal%
\pgfmathparse{int(\pgfmathresult/10)}%
\fi%
\let\remainder=\pgfmathresult%
\pgfmathsetcount\columntotal{\columntotal-\remainder}%
\advance\digitcount by-1
\pgfmathsetcount\tmptotal{\tmptotal-\tmptmptotal*(10^\digitcount)}%
\ifnum\columntotal<\targetbase
\edef\currentdigit{\uppercase{\digittoalpha{\the\columntotal}}}%
\ifnum\columntotal>9
\edef\currentdigit{\noexpand\rm{\currentdigit}}%
\fi
\node at (0,-\pgfmathcounter*2) [table node] (@) {%
\\
\ifnum\columntotal<10
\color{red}$\the\columntotal$%
\else
$\the\columntotal$\\%
\tikz\draw[->](0,0)(-0.75ex,0)--++(0,-0.5);\\%
\color{red}\currentdigit%
\fi
};%
\expandafter\expandafter\expandafter\gdef\expandafter\expandafter\expandafter\convertednumber%
\expandafter\expandafter\expandafter{\expandafter\currentdigit\convertednumber}%
\digitcount=0%
\else
\node at (0,-\pgfmathcounter*2) [table node](@) {$\the\columntotal$};%
\fi
\draw (@.north west) -- (@.north east);
\node at (0,-\pgfmathcounter*2+1) [table node] {$\remainder$};%
\repeatpgfmathloop%
\tikzset{shift={(1,-1)}}%
\expandafter\dobaseconversiontable\expandafter{\the\nextcolumntotal}%
\fi
}%
\begin{tabular}{ccc}
\baseconversiontable{3022}{16}&&
\baseconversiontable{1462}{12}\\
\baseconversiontable{5407}{19}&&
\baseconversiontable{3887}{36}
\end{tabular}
\end{document}

:-/
IMHO all these tries to make things simple are stupid and make it only more complicated...