Happy numbers: Difference between revisions
Content added Content deleted
(Added Algol W) |
(→{{header|ALGOL W}}: Removed near duplicate entry) Tag: Manual revert |
||
Line 465: | Line 465: | ||
28 |
28 |
||
31</pre> |
31</pre> |
||
=={{header|ALGOL W}}== |
|||
<syntaxhighlight lang="algolw"> |
|||
begin % find some happy numbers: numbers whose digit-square sums become 1 % |
|||
% when repeatedly applied % |
|||
% returns true if n is happy, false otherwise % |
|||
logical procedure isHappy ( integer value n ) ; |
|||
begin |
|||
% the largest digit-square sun for a 9 digit number is 729: 81 * 9 % |
|||
logical array seen ( 0 :: 729 ); |
|||
integer v, dSum; |
|||
for i := 0 until 729 do seen( i ) := false; |
|||
v := abs n; |
|||
while begin |
|||
dSum := 0; |
|||
while v not = 0 do begin |
|||
integer d; |
|||
d := v rem 10; |
|||
v := v div 10; |
|||
dSum := dSum + ( d * d ) |
|||
end while_v_ne_0 ; |
|||
dSum not = 1 and not seen( dSum ) |
|||
end |
|||
do begin |
|||
seen( dSum ) := true; |
|||
v := dSum |
|||
end while_not_happy_and_not_looping ; |
|||
dSum = 1 |
|||
end isHappy ; |
|||
begin % find the first 8 happy numbers % |
|||
integer n, hCount; |
|||
hCount := 0; |
|||
n := 1; |
|||
while hCount < 8 do begin |
|||
if isHappy( n ) then begin |
|||
writeon( i_w := 1, s_w := 0, " ", n ); |
|||
hCount := hCount + 1 |
|||
end if_isHappy__n ; |
|||
n := n + 1 |
|||
end while_hCount_lt_10 |
|||
end |
|||
end. |
|||
</syntaxhighlight> |
|||
{{out}} |
|||
<pre> |
|||
1 7 10 13 19 23 28 31 |
|||
</pre> |
|||
=={{header|ALGOL W}}== |
=={{header|ALGOL W}}== |