33 lines
569 B
Text
33 lines
569 B
Text
PROCEDURE Main()
|
|
LOCAL i := 8, nH := 0
|
|
|
|
? hb_StrFormat( "The first %d happy numbers are:", i )
|
|
?
|
|
|
|
WHILE i > 0
|
|
IF IsHappy( ++nH )
|
|
?? hb_NtoS( nH ) + " "
|
|
--i
|
|
ENDIF
|
|
END
|
|
|
|
RETURN
|
|
|
|
STATIC FUNCTION IsHappy( nNumber )
|
|
STATIC aUnhappy := {}
|
|
LOCAL nDigit, nSum := 0, cNumber := hb_NtoS( nNumber )
|
|
|
|
FOR EACH nDigit IN cNumber
|
|
nSum += Val( nDigit ) ^ 2
|
|
NEXT
|
|
|
|
IF nSum == 1
|
|
aUnhappy := {}
|
|
RETURN .T.
|
|
ELSEIF AScan( aUnhappy, nSum ) > 0
|
|
RETURN .F.
|
|
ENDIF
|
|
|
|
AAdd( aUnhappy, nSum )
|
|
|
|
RETURN IsHappy( nSum )
|