Narcissistic decimal number: Difference between revisions
Content added Content deleted
Not a robot (talk | contribs) (add Draco) |
Not a robot (talk | contribs) (Add PL/M) |
||
Line 4,357: | Line 4,357: | ||
29 narcissistic: 146511208 199768 00:50:22.777 |
29 narcissistic: 146511208 199768 00:50:22.777 |
||
30 narcissistic: 472335975 1221384 01:10:44.161 </pre> |
30 narcissistic: 472335975 1221384 01:10:44.161 </pre> |
||
=={{header|PL/M}}== |
|||
PL/M-80 only supports 16-bit integers, so this prints only the first 18 narcissistic decimal numbers. |
|||
<syntaxhighlight lang="plm">100H: |
|||
BDOS: PROCEDURE (FN,AR); DECLARE FN BYTE, AR ADDRESS; GO TO 5; END BDOS; |
|||
EXIT: PROCEDURE; GO TO 0; END EXIT; |
|||
PR$CHAR: PROCEDURE (CR); DECLARE CR BYTE; CALL BDOS(2,CR); END PR$CHAR; |
|||
PR$STR: PROCEDURE (S); DECLARE S ADDRESS; CALL BDOS(9,S); END PR$STR; |
|||
DIGITS: PROCEDURE (N,BUF) BYTE; |
|||
DECLARE (N, BUF) ADDRESS; |
|||
DECLARE (DIGIT BASED BUF, TEMP, I, LEN) BYTE; |
|||
I = 5; |
|||
STEP: |
|||
DIGIT(I := I-1) = N MOD 10; |
|||
IF (N := N/10) > 0 THEN GO TO STEP; |
|||
LEN = 0; |
|||
DO WHILE I<5; |
|||
DIGIT(LEN) = DIGIT(I); |
|||
LEN = LEN+1; |
|||
I = I+1; |
|||
END; |
|||
RETURN LEN; |
|||
END DIGITS; |
|||
PR$NUM: PROCEDURE (N); |
|||
DECLARE N ADDRESS, DS (5) BYTE, I BYTE; |
|||
DO I = 0 TO DIGITS(N,.DS) - 1; |
|||
CALL PR$CHAR('0' + DS(I)); |
|||
END; |
|||
CALL PR$STR(.(13,10,'$')); |
|||
END PR$NUM; |
|||
POWER: PROCEDURE (N,P) ADDRESS; |
|||
DECLARE (N, P, R) ADDRESS; |
|||
R = 1; |
|||
DO WHILE P > 0; |
|||
R = R * N; |
|||
P = P - 1; |
|||
END; |
|||
RETURN R; |
|||
END POWER; |
|||
NARCISSIST: PROCEDURE (N) ADDRESS; |
|||
DECLARE (LEN, I) BYTE, DS (5) BYTE; |
|||
DECLARE (N, POWSUM) ADDRESS; |
|||
LEN = DIGITS(N, .DS); |
|||
POWSUM = 0; |
|||
DO I = 0 TO LEN-1; |
|||
POWSUM = POWSUM + POWER(DS(I), LEN); |
|||
END; |
|||
RETURN POWSUM = N; |
|||
END NARCISSIST; |
|||
DECLARE CAND ADDRESS; |
|||
DO CAND = 0 TO 65534; |
|||
IF NARCISSIST(CAND) THEN CALL PR$NUM(CAND); |
|||
END; |
|||
CALL EXIT; |
|||
EOF</syntaxhighlight> |
|||
{{out}} |
|||
<pre>0 |
|||
1 |
|||
2 |
|||
3 |
|||
4 |
|||
5 |
|||
6 |
|||
7 |
|||
8 |
|||
9 |
|||
153 |
|||
370 |
|||
371 |
|||
407 |
|||
1634 |
|||
8208 |
|||
9474 |
|||
54748</pre> |
|||
=={{header|PowerShell}}== |
=={{header|PowerShell}}== |
||
Line 4,399: | Line 4,480: | ||
548834 1741725 4210818 9800817 9926315 |
548834 1741725 4210818 9800817 9926315 |
||
</pre> |
</pre> |
||
=={{header|Prolog}}== |
=={{header|Prolog}}== |
||
works with swi-prolog |
works with swi-prolog |