Numbers divisible by their individual digits, but not by the product of their digits.: Difference between revisions

Add PL/M
(→‎{{header|Python}}: Added a solution using Python.)
(Add PL/M)
Line 660:
found 45 didbntp thingies less than one thousand: 22,33,44,48,55,...,848,864,888,936,999
</pre>
 
=={{header|PL/M}}==
<lang plm>100H:
 
/* CHECK NUMBER */
DIVISIBLE: PROCEDURE (N) BYTE;
DECLARE (N, I, PROD) ADDRESS;
DECLARE D BYTE;
PROD = 1;
I = N;
DO WHILE N > 0;
D = N MOD 10;
N = N / 10;
IF D = 0 THEN RETURN 0;
IF I MOD D <> 0 THEN RETURN 0;
PROD = PROD * D;
END;
RETURN I MOD PROD <> 0;
END DIVISIBLE;
 
/* CP/M BDOS CALL - PL/M DOESN'T ACTUALLY COME WITH OUTPUT ROUTINES */
BDOS: PROCEDURE (FN, ARG);
DECLARE FN BYTE, ARG ADDRESS;
GO TO 5;
END BDOS;
 
/* PRINT DECIMAL NUMBER */
PRINT$NUMBER: PROCEDURE (N);
DECLARE S (8) BYTE INITIAL ('.....',13,10,'$');
DECLARE (N, P) ADDRESS, C BASED P BYTE;
P = .S(5);
DIGIT:
P = P - 1;
C = N MOD 10 + '0';
N = N / 10;
IF N > 0 THEN GO TO DIGIT;
CALL BDOS(9, P);
END PRINT$NUMBER;
 
/* TEST THE NUMBERS 1..1000 */
DECLARE N ADDRESS;
DO N=1 TO 999;
IF DIVISIBLE(N) THEN
CALL PRINT$NUMBER(N);
END;
 
CALL BDOS(0,0);
EOF</lang>
{{out}}
<pre style="height:50ex;">22
33
44
48
55
66
77
88
99
122
124
126
155
162
168
184
222
244
248
264
288
324
333
336
366
396
412
424
444
448
488
515
555
636
648
666
728
777
784
824
848
864
888
936
999</pre>
 
=={{header|Python}}==
2,096

edits