Digital root/Multiplicative digital root: Difference between revisions

no edit summary
(→‎{{header|Kotlin}}: Updated example see https://github.com/dkandalov/rosettacode-kotlin for details)
No edit summary
Line 750:
8: (8 18 24 29 36)
9: (9 19 33 91 119)</pre>
 
=={{header|Component Pascal}}==
{{Works with| BlackBox Component Builder}}
<lang oberon2>
MODULE MDR;
IMPORT StdLog, Strings, TextMappers, DevCommanders;
 
PROCEDURE CalcMDR(x: LONGINT; OUT mdr, mp: LONGINT);
VAR
str: ARRAY 64 OF CHAR;
i: INTEGER;
BEGIN
mdr := 1; mp := 0;
LOOP
Strings.IntToString(x,str);
IF LEN(str$) = 1 THEN mdr := x; EXIT END;
i := 0;mdr := 1;
WHILE i < LEN(str$) DO
mdr := mdr * (ORD(str[i]) - ORD('0'));
INC(i)
END;
INC(mp);
x := mdr
END
END CalcMDR;
 
PROCEDURE Do*;
VAR
mdr,mp: LONGINT;
s: TextMappers.Scanner;
BEGIN
s.ConnectTo(DevCommanders.par.text);
s.SetPos(DevCommanders.par.beg);
REPEAT
s.Scan;
IF (s.type = TextMappers.int) OR (s.type = TextMappers.lint) THEN
CalcMDR(s.int,mdr,mp);
StdLog.Int(s.int);
StdLog.String(" MDR: ");StdLog.Int(mdr);
StdLog.String(" MP: ");StdLog.Int(mp);StdLog.Ln
END
UNTIL s.rider.eot;
END Do;
 
PROCEDURE Show(i: INTEGER; x: ARRAY OF LONGINT);
VAR
k: INTEGER;
BEGIN
StdLog.Int(i);StdLog.String(": ");
FOR k := 0 TO LEN(x) - 1 DO
StdLog.Int(x[k])
END;
StdLog.Ln
END Show;
 
PROCEDURE FirstFive*;
VAR
i,j: INTEGER;
five: ARRAY 5 OF LONGINT;
x,mdr,mp: LONGINT;
BEGIN
FOR i := 0 TO 9 DO
j := 0;x := 0;
WHILE (j < LEN(five)) DO
CalcMDR(x,mdr,mp);
IF mdr = i THEN five[j] := x; INC(j) END;
INC(x)
END;
Show(i,five)
END
END FirstFive;
 
END MDR.
</lang>
Execute:
^Q MDR.Do 123321 7739 893 899998 ~
{{out}}
<pre>
123321 MDR: 8 MP: 3
7739 MDR: 8 MP: 3
893 MDR: 2 MP: 3
899998 MDR: 0 MP: 2
</pre>
Execute:
^Q MDR.FirstFive
{{out}}
<pre>
0: 0 10 20 25 30
1: 1 11 111 1111 11111
2: 2 12 21 26 34
3: 3 13 31 113 131
4: 4 14 22 27 39
5: 5 15 35 51 53
6: 6 16 23 28 32
7: 7 17 71 117 171
8: 8 18 24 29 36
9: 9 19 33 91 119
</pre>
=={{header|D}}==
{{trans|Python}}
Anonymous user