Own digits power sum: Difference between revisions

Added XPL0 example.
m (→‎{{header|Pascal}}: Nearly 1s for all up to 19 digits. Creating combination with included update of used digits.)
(Added XPL0 example.)
Line 1,773:
<pre>
Same as iterative version.
</pre>
 
=={{header|XPL0}}==
Slow (14.4 second) recursive solution on a Pi4.
<lang XPL0>int Num, NumLen, PowTbl(10, 10);
proc PowSum(Lev, Sum); \Display own digits power sum
int Lev, Sum, Dig;
[if Lev = 0 then
[for Dig:= 0 to 9 do
[if Sum + PowTbl(Dig, NumLen) = Num and Num >= 100 then
[IntOut(0, Num); CrLf(0)];
Num:= Num+1;
case Num of
10, 100, 1_000, 10_000, 100_000, 1_000_000, 10_000_000, 100_000_000:
NumLen:= NumLen+1
other [];
];
]
else for Dig:= 0 to 9 do \recurse
PowSum(Lev-1, Sum + PowTbl(Dig, NumLen));
];
 
int Dig, Pow;
[for Dig:= 0 to 9 do \make digit power table (for speed)
[PowTbl(Dig, 1):= Dig;
for Pow:= 2 to 9 do
PowTbl(Dig, Pow):= PowTbl(Dig, Pow-1)*Dig;
];
Num:= 0;
NumLen:= 1;
PowSum(9-1, 0);
]</lang>
 
{{out}}
<pre>
153
370
371
407
1634
8208
9474
54748
92727
93084
548834
1741725
4210818
9800817
9926315
24678050
24678051
88593477
146511208
472335975
534494836
912985153
</pre>
772

edits