RosettaCodeData/Task/Digital-root/Zonnon/digital-root.zonnon

41 lines
872 B
Plaintext

module Main;
type
longint = integer{64};
type {public,ref}
Response = object (dr,p: longint)
var {public,immutable}
digitalRoot,persistence: longint;
procedure {public} Writeln;
begin
writeln("digital root: ",digitalRoot:2," persistence: ",persistence:2)
end Writeln;
begin
self.digitalRoot := dr;
self.persistence := p;
end Response;
procedure DigitalRoot(n:longint):Response;
var
sum,p: longint;
begin
p := 0;
loop
inc(p);sum := 0;
while (n > 0) do
inc(sum,n mod 10);
n := n div 10;
end;
if sum < 10 then return new Response(sum,p) else n := sum end
end
end DigitalRoot;
begin
write(627615:22,":> ");DigitalRoot(627615).Writeln;
write(39390:22,":> ");DigitalRoot(39390).Writeln;
write(588225:22,":> ");DigitalRoot(588225).Writeln;
write(max(integer{64}):22,":> ");DigitalRoot(max(integer{64})).Writeln;
end Main.