43 lines
883 B
Plaintext
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.
|