Digital root/Multiplicative digital root: Difference between revisions
Content added Content deleted
(→{{header|Kotlin}}: Updated example see https://github.com/dkandalov/rosettacode-kotlin for details) |
No edit summary |
||
Line 750: | Line 750: | ||
8: (8 18 24 29 36) |
8: (8 18 24 29 36) |
||
9: (9 19 33 91 119)</pre> |
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}}== |
=={{header|D}}== |
||
{{trans|Python}} |
{{trans|Python}} |