Munchausen numbers: Difference between revisions
Content added Content deleted
m (remove ()) |
(Added Algol W) |
||
Line 121: | Line 121: | ||
+3435 |
+3435 |
||
+438579088 |
+438579088 |
||
</pre> |
|||
=={{header|ALGOL W}}== |
|||
{{Trans|ALGOL 68}} |
|||
<lang algolw>% endnd Munchausen Numbers between 1 and 5000 % |
|||
% note that 6^6 is 46 656 so we only need to cosider numbers consisting of 0 to 5 % |
|||
begin |
|||
% table of nthPowers - note 0^0 is 0 for Munchausen numbers, not 1 % |
|||
integer array nthPower( 0 :: 5 ); |
|||
integer d1, d2, d3, d4, d1Part, d2Part, d3Part; |
|||
nthPower( 0 ) := 0; nthPower( 1 ) := 1; |
|||
nthPower( 2 ) := 2 * 2; nthPower( 3 ) := 3 * 3 * 3; |
|||
nthPower( 4 ) := 4 * 4 * 4 * 4; nthPower( 5 ) := 5 * 5 * 5 * 5 * 5; |
|||
d1 := d2 := d3 := d1Part := d2Part := d3Part := 0; |
|||
d4 := 1; |
|||
while d1 < 6 do begin |
|||
integer number, digitPowerSum; |
|||
number := d1Part + d2Part + d3Part + d4; |
|||
digitPowerSum := nthPower( d1 ) |
|||
+ nthPower( d2 ) |
|||
+ nthPower( d3 ) |
|||
+ nthPower( d4 ); |
|||
if digitPowerSum = number then begin |
|||
write( i_w := 1, number ) |
|||
end; |
|||
d4 := d4 + 1; |
|||
if d4 > 5 then begin |
|||
d4 := 0; |
|||
d3 := d3 + 1; |
|||
d3Part := d3Part + 10; |
|||
if d3 > 5 then begin |
|||
d3 := 0; |
|||
d3Part := 0; |
|||
d2 := d2 + 1; |
|||
d2Part := d2Part + 100; |
|||
if d2 > 5 then begin |
|||
d2 := 0; |
|||
d2Part := 0; |
|||
d1 := d1 + 1; |
|||
d1Part := d1Part + 1000; |
|||
end |
|||
end |
|||
end |
|||
end |
|||
end.</lang> |
|||
{{out}} |
|||
<pre> |
|||
1 |
|||
3435 |
|||
</pre> |
</pre> |
||