Happy numbers: Difference between revisions
Content added Content deleted
(→{{header|ALGOL W}}: Removed near duplicate entry) Tag: Manual revert |
(→{{header|ALGOL W}}: Slightly simpler version) |
||
Line 467: | Line 467: | ||
=={{header|ALGOL W}}== |
=={{header|ALGOL W}}== |
||
<syntaxhighlight lang="algolw"> |
<syntaxhighlight lang="algolw"> |
||
begin % find some happy numbers: numbers whose digit-square sums become 1 % |
|||
⚫ | |||
% returns true if n is happy, false otherwise |
% returns true if n is happy, false otherwise % |
||
logical procedure isHappy( integer value n ) ; |
logical procedure isHappy ( integer value n ) ; |
||
⚫ | |||
⚫ | |||
% seen is used to hold the values of the cycle of the % |
|||
⚫ | |||
% version, we do not need a large array. The digit % |
|||
% square sum of 9 999 999 999 is 810... % |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end while_not_terminated_and_tPos_lt_trys ; |
|||
number > 1 and not terminated |
|||
⚫ | |||
⚫ | |||
trys := trys + 1; |
|||
seen( trys ) := number; |
|||
sum := 0; |
|||
while number > 0 do begin |
|||
integer digit; |
|||
digit := number rem 10; |
|||
number := number div 10; |
|||
sum := sum + ( digit * digit ) |
|||
end while_number_gt_0 ; |
|||
number := sum |
|||
end while_number_gt_1_and_not_terminated ; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
begin |
begin |
||
⚫ | |||
integer happyCount, n; |
|||
logical array seen ( 0 :: 729 ); |
|||
integer v, dSum; |
|||
for i := 0 until 729 do seen( i ) := false; |
|||
v := abs n; |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
end while_not_happy_and_not_looping ; |
|||
⚫ | |||
⚫ | |||
begin % find the first 8 happy numbers % |
|||
⚫ | |||
hCount := 0; |
|||
⚫ | |||
⚫ | |||
if isHappy( n ) then begin |
if isHappy( n ) then begin |
||
writeon( i_w := 1, " ", n ); |
writeon( i_w := 1, s_w := 0, " ", n ); |
||
hCount := hCount + 1 |
|||
end |
end if_isHappy__n ; |
||
n := n + 1 |
n := n + 1 |
||
end |
end while_hCount_lt_10 |
||
end |
end |
||
end. |
|||
</syntaxhighlight> |
|||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
1 7 10 13 19 23 28 31 |
|||
</pre> |
</pre> |
||