program HappyNumberCheck;
// 8^2 + 2^2 = 68
// 6^2 + 8^2 = 100
// 1^2 + 0^2 + 0^2 = 1 = happy number
function SumOfSquares(n: Integer): Integer;
var
digit: Integer;
sum: Integer;
begin
sum := 0;
while n > 0 do
begin
digit := n mod 10;
sum := sum + digit * digit;
n := n div 10;
end;
SumOfSquares := sum;
end;
function IsHappyNumber(n: Integer): Boolean;
var
seen: array[1..1000] of Boolean;
i: Integer;
begin
for i := 1 to 1000 do
seen[i] := False;
while (n <> 1) and (not seen[n]) do
begin
seen[n] := True;
n := SumOfSquares(n);
if n > 1000 then
n := n mod 1000; { Prevent array overflow }
end;
IsHappyNumber := (n = 1);
end;
var
num: Integer;
begin
num := 82;
if IsHappyNumber(num) then
WriteLn(num, ' is a happy number.')
else
WriteLn(num, ' is NOT a happy number.');
ReadLn;
end.
(*
run:
82 is a happy number.
*)