methods / longdiv.texon commit [methods] general notes additions (3a71a25)
   1%  longdiv.tex  v.1  (1994)  Donald Arseneau  
   2%
   3%  Work out and print integer long division problems.  Use:
   4%       \longdiv{numerator}{denominator}
   5%  The numerator and denominator (divisor and dividend) must be integers, and
   6%  the quotient is an integer too.  \longdiv leaves a remainder.
   7%  Use this in any type of TeX.
   8
   9\newcount\gpten % (global) power-of-ten -- tells which digit we are doing
  10\countdef\rtot2 % running total -- remainder so far
  11\countdef\LDscratch4 % scratch
  12
  13\def\longdiv#1#2{%
  14 \vtop{\normalbaselines \offinterlineskip
  15   \setbox\strutbox\hbox{\vrule height 2.1ex depth .5ex width0ex}%
  16   \def\showdig{$\underline{\the\LDscratch\strut}$\cr\the\rtot\strut\cr
  17       \noalign{\kern-.2ex}}%
  18   \global\rtot=#1\relax
  19   \count0=\rtot\divide\count0by#2\edef\quotient{\the\count0}%\show\quotient
  20   % make list macro out of digits in quotient:
  21   \def\temp##1{\ifx##1\temp\else \noexpand\dodig ##1\expandafter\temp\fi}%
  22   \edef\routine{\expandafter\temp\quotient\temp}%
  23   % process list to give power-of-ten:
  24   \def\dodig##1{\global\multiply\gpten by10 }\global\gpten=1 \routine
  25   % to display effect of one digit in quotient (zero ignored):
  26   \def\dodig##1{\global\divide\gpten by10
  27      \LDscratch =\gpten
  28      \multiply\LDscratch  by##1%
  29      \multiply\LDscratch  by#2%
  30      \global\advance\rtot-\LDscratch \relax
  31      \ifnum\LDscratch>0 \showdig \fi % must hide \cr in a macro to skip it
  32   }%
  33   \tabskip=0pt
  34   \halign{\hfil##\cr % \halign for entire division problem
  35     $\quotient$\strut\cr
  36     #2$\,\overline{\vphantom{\big)}%
  37     \hbox{\smash{\raise3.5\fontdimen8\textfont3\hbox{$\big)$}}}%
  38     \mkern2mu \the\rtot}$\cr\noalign{\kern-.2ex}
  39     \routine \cr % do each digit in quotient
  40}}}
  41
  42\endinput % Demonstration below:
  43
  44\noindent Here are some long division problems
  45
  46\indent
  47\longdiv{12345}{13} \quad
  48\longdiv{123}{1234} \quad
  49\longdiv{31415926}{2} \quad
  50\longdiv{81}{3} \quad
  51\longdiv{1132}{99} \quad
  52\longdiv{86491}{94}
  53\bye