Jump to content

Sum of the digits of n is substring of n: Difference between revisions

Add PL/M
(Add BASIC)
(Add PL/M)
Line 261:
Found 365 such numbers < 10001: 0, 1, 2, 3, 4, ..., 9926, 9927, 9928, 9929, 10000
</pre>
 
=={{header|PL/M}}==
<lang plm>100H:
DIGIT$SUM: PROCEDURE (N) BYTE;
DECLARE N ADDRESS, SUM BYTE;
SUM = 0;
DO WHILE N > 0;
SUM = SUM + N MOD 10;
N = N / 10;
END;
RETURN SUM;
END DIGIT$SUM;
 
ITOA: PROCEDURE (N) ADDRESS;
DECLARE S (6) BYTE INITIAL ('.....$');
DECLARE (N, P) ADDRESS, C BASED P BYTE;
P = .S(5);
DIGIT:
P = P - 1;
C = N MOD 10 + '0';
IF (N := N / 10) > 0 THEN GO TO DIGIT;
RETURN P;
END ITOA;
 
COPY$STRING: PROCEDURE (IN, OUT);
DECLARE (IN, OUT) ADDRESS;
DECLARE (I BASED IN, O BASED OUT) BYTE;
DO WHILE I <> '$';
O = I;
IN = IN + 1;
OUT = OUT + 1;
END;
O = '$';
END COPY$STRING;
 
CONTAINS: PROCEDURE (HAYSTACK, NEEDLE) BYTE;
DECLARE (NEEDLE, HAYSTACK, NPOS, HPOS) ADDRESS;
DECLARE (N BASED NPOS, H BASED HPOS, HS BASED HAYSTACK) BYTE;
DO WHILE HS <> '$';
NPOS = NEEDLE;
HPOS = HAYSTACK;
DO WHILE N = H AND H <> '$' AND N <> '$';
NPOS = NPOS + 1;
HPOS = HPOS + 1;
END;
IF N = '$' THEN RETURN 1;
HAYSTACK = HAYSTACK + 1;
END;
RETURN 0;
END CONTAINS;
 
BDOS: PROCEDURE (FN, ARG);
DECLARE FN BYTE, ARG ADDRESS;
GO TO 5;
END BDOS;
 
PRINT: PROCEDURE (STRING);
DECLARE STRING ADDRESS;
CALL BDOS(9, STRING);
END PRINT;
 
DECLARE N ADDRESS;
DECLARE S1 (6) BYTE, S2 (6) BYTE;
DO N = 0 TO 999;
CALL COPY$STRING(ITOA(N), .S1);
CALL COPY$STRING(ITOA(DIGIT$SUM(N)), .S2);
IF CONTAINS(.S1, .S2) THEN DO;
CALL PRINT(.S1);
CALL PRINT(.' $');
END;
END;
 
CALL BDOS(0,0);
EOF</lang>
{{out}}
<pre>0 1 2 3 4 5 6 7 8 9 10 20 30 40 50 60 70 80 90 100 109 119 129 139 149 159 169 179 189 199 200 300 400 500 600 700 800 900 910 911 912 913 914 915 916 917 918 919</pre>
 
=={{header|Python}}==
2,125

edits

Cookies help us deliver our services. By using our services, you agree to our use of cookies.