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.