45 lines
953 B
Plaintext
45 lines
953 B
Plaintext
' FB 1.05.0 Win64
|
|
|
|
Function isHappy(n As Integer) As Boolean
|
|
If n < 0 Then Return False
|
|
' Declare a dynamic array to store previous sums.
|
|
' If a previous sum is duplicated before a sum of 1 is reached
|
|
' then the number can't be "happy" as the cycle will just repeat
|
|
Dim prevSums() As Integer
|
|
Dim As Integer digit, ub, sum = 0
|
|
Do
|
|
While n > 0
|
|
digit = n Mod 10
|
|
sum += digit * digit
|
|
n \= 10
|
|
Wend
|
|
If sum = 1 Then Return True
|
|
ub = UBound(prevSums)
|
|
If ub > -1 Then
|
|
For i As Integer = 0 To ub
|
|
If sum = prevSums(i) Then Return False
|
|
Next
|
|
End If
|
|
ub += 1
|
|
Redim Preserve prevSums(0 To ub)
|
|
prevSums(ub) = sum
|
|
n = sum
|
|
sum = 0
|
|
Loop
|
|
End Function
|
|
|
|
Dim As Integer n = 1, count = 0
|
|
|
|
Print "The first 8 happy numbers are : "
|
|
Print
|
|
While count < 8
|
|
If isHappy(n) Then
|
|
count += 1
|
|
Print count;" =>"; n
|
|
End If
|
|
n += 1
|
|
Wend
|
|
Print
|
|
Print "Press any key to quit"
|
|
Sleep
|