Disarium numbers: Difference between revisions

Add Modula-2
(Add Focal)
(Add Modula-2)
Line 1,623:
<pre>{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 89, 135, 175, 518, 598, 1306, 1676, 2427, 2646798}</pre>
 
=={{header|Modula-2}}==
<syntaxhighlight lang="modula2">MODULE DisariumNumbers;
FROM InOut IMPORT WriteLn, WriteCard;
 
CONST Max = 2500;
VAR n: CARDINAL;
 
PROCEDURE cpow(base, power: CARDINAL): CARDINAL;
VAR i, result: CARDINAL;
BEGIN
result := 1;
FOR i := 1 TO power DO
result := result * base
END;
RETURN result
END cpow;
 
PROCEDURE length(n: CARDINAL): CARDINAL;
VAR len: CARDINAL;
BEGIN
len := 1;
WHILE n > 10 DO
INC(len);
n := n DIV 10
END;
RETURN len
END length;
 
PROCEDURE digitpowersum(n: CARDINAL): CARDINAL;
VAR powsum, exp: CARDINAL;
BEGIN
powsum := 0;
FOR exp := length(n) TO 1 BY -1 DO
powsum := powsum + cpow(n MOD 10, exp);
n := n DIV 10
END;
RETURN powsum
END digitpowersum;
 
PROCEDURE disarium(n: CARDINAL): BOOLEAN;
BEGIN
RETURN digitpowersum(n) = n
END disarium;
 
BEGIN
FOR n := 0 TO Max DO
IF disarium(n) THEN
WriteCard(n, 5);
WriteLn
END
END
END DisariumNumbers.</syntaxhighlight>
{{out}}
<pre> 0
1
2
3
4
5
6
7
8
9
89
135
175
518
598
1306
1676
2427</pre>
=={{header|Nim}}==
<syntaxhighlight lang="nim">import strutils
2,114

edits