52 lines
1.1 KiB
Plaintext
52 lines
1.1 KiB
Plaintext
MODULE DigitalRoot;
|
|
FROM FormatString IMPORT FormatString;
|
|
FROM Terminal IMPORT WriteString,WriteLn,ReadChar;
|
|
|
|
TYPE Root =
|
|
RECORD
|
|
persistence,root : LONGINT;
|
|
END;
|
|
|
|
PROCEDURE digitalRoot(inRoot,base : LONGINT) : Root;
|
|
VAR root,persistence,num : LONGINT;
|
|
BEGIN
|
|
root := ABS(inRoot);
|
|
persistence := 0;
|
|
WHILE root>=base DO
|
|
num := root;
|
|
root := 0;
|
|
WHILE num#0 DO
|
|
root := root + (num MOD base);
|
|
num := num DIV base;
|
|
END;
|
|
INC(persistence)
|
|
END;
|
|
RETURN Root{persistence, root}
|
|
END digitalRoot;
|
|
|
|
PROCEDURE Print(n,b : LONGINT);
|
|
VAR
|
|
buf : ARRAY[0..63] OF CHAR;
|
|
r : Root;
|
|
BEGIN
|
|
r := digitalRoot(n,b);
|
|
FormatString("%u (base %u): persistence=%u, digital root=%u\n", buf, n, b, r.persistence, r.root);
|
|
WriteString(buf)
|
|
END Print;
|
|
|
|
VAR
|
|
buf : ARRAY[0..63] OF CHAR;
|
|
b,n : LONGINT;
|
|
r : Root;
|
|
BEGIN
|
|
Print(1,10);
|
|
Print(14,10);
|
|
Print(267,10);
|
|
Print(8128,10);
|
|
Print(39390,10);
|
|
Print(627615,10);
|
|
Print(588225,10);
|
|
|
|
ReadChar
|
|
END DigitalRoot.
|