summaryrefslogtreecommitdiff
path: root/macros/generic/misc/longdiv.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/generic/misc/longdiv.tex')
-rw-r--r--macros/generic/misc/longdiv.tex53
1 files changed, 53 insertions, 0 deletions
diff --git a/macros/generic/misc/longdiv.tex b/macros/generic/misc/longdiv.tex
new file mode 100644
index 0000000000..4c9a1d4fd1
--- /dev/null
+++ b/macros/generic/misc/longdiv.tex
@@ -0,0 +1,53 @@
+% longdiv.tex v.1 (1994) Donald Arseneau
+%
+% Work out and print integer long division problems. Use:
+% \longdiv{numerator}{denominator}
+% The numerator and denominator (divisor and dividend) must be integers, and
+% the quotient is an integer too. \longdiv leaves a remainder.
+% Use this in any type of TeX.
+
+\newcount\gpten % (global) power-of-ten -- tells which digit we are doing
+\countdef\rtot2 % running total -- remainder so far
+\countdef\LDscratch4 % scratch
+
+\def\longdiv#1#2{%
+ \vtop{\normalbaselines \offinterlineskip
+ \setbox\strutbox\hbox{\vrule height 2.1ex depth .5ex width0ex}%
+ \def\showdig{$\underline{\the\LDscratch\strut}$\cr\the\rtot\strut\cr
+ \noalign{\kern-.2ex}}%
+ \global\rtot=#1\relax
+ \count0=\rtot\divide\count0by#2\edef\quotient{\the\count0}%\show\quotient
+ % make list macro out of digits in quotient:
+ \def\temp##1{\ifx##1\temp\else \noexpand\dodig ##1\expandafter\temp\fi}%
+ \edef\routine{\expandafter\temp\quotient\temp}%
+ % process list to give power-of-ten:
+ \def\dodig##1{\global\multiply\gpten by10 }\global\gpten=1 \routine
+ % to display effect of one digit in quotient (zero ignored):
+ \def\dodig##1{\global\divide\gpten by10
+ \LDscratch =\gpten
+ \multiply\LDscratch by##1%
+ \multiply\LDscratch by#2%
+ \global\advance\rtot-\LDscratch \relax
+ \ifnum\LDscratch>0 \showdig \fi % must hide \cr in a macro to skip it
+ }%
+ \tabskip=0pt
+ \halign{\hfil##\cr % \halign for entire division problem
+ $\quotient$\strut\cr
+ #2$\,\overline{\vphantom{\big)}%
+ \hbox{\smash{\raise3.5\fontdimen8\textfont3\hbox{$\big)$}}}%
+ \mkern2mu \the\rtot}$\cr\noalign{\kern-.2ex}
+ \routine \cr % do each digit in quotient
+}}}
+
+\endinput % Demonstration below:
+
+\noindent Here are some long division problems
+
+\indent
+\longdiv{12345}{13} \quad
+\longdiv{123}{1234} \quad
+\longdiv{31415926}{2} \quad
+\longdiv{81}{3} \quad
+\longdiv{1132}{99} \quad
+\longdiv{86491}{94}
+\bye