RosettaCodeData/Task/Digital-root/Modula-3/digital-root.mod3

43 lines
883 B
Plaintext

MODULE DigitalRoot EXPORTS Main;
IMPORT IO;
FROM Fmt IMPORT F,LongInt;
TYPE
Root = RECORD persistence,R:LONGINT END;
VAR
R:Root;
Arr:ARRAY[0..3] OF LONGINT := ARRAY OF LONGINT{627615L,
39390L,
588225L,
393900588225L};
PROCEDURE DigitalRoot(InRoot,Base:LONGINT):Root =
VAR
r,persistence,Num:LONGINT;
BEGIN
r := ABS(InRoot);
persistence := 0L;
WHILE r >= Base DO
Num := r;
r := 0L;
WHILE Num # 0L DO
r := r + (Num MOD Base);
Num := Num DIV Base;
END;
INC(persistence);
END;
RETURN Root{persistence, r};
END DigitalRoot;
BEGIN
FOR I := FIRST(Arr) TO LAST(Arr) DO
R := DigitalRoot(Arr[I], 10L);
IO.Put(F(LongInt(Arr[I]) &
" has additive persistence %s and digital root of %s\n",
LongInt(R.persistence),
LongInt(R.R)));
END;
END DigitalRoot.