Home |
Search |
Today's Posts |
#11
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
It appears that non HappyNumbers have a cycle. Maybe we can use that to
speed up the code... Function HappyNumber(n) As Boolean Dim p As Long Dim d As Long Dim t As Long Dim s As String If n <= 0 Then HappyNumber = False Exit Function End If s = CStr(n) For p = 1 To Len(s) d = Mid$(s, p, 1) t = t + d * d Next p Select Case t Case 1 HappyNumber = True Case 2, 4, 16, 37, 58, 89, 145, 42, 20 HappyNumber = False Case Else HappyNumber = HappyNumber(t) End Select End Function ?HappyNumber(19) True -- Dana DeLouis Win XP & Office 2003 "Gary Keramidas" <GKeramidasATmsn.com wrote in message ... thanks dave, the only place i didn't try it -- Gary "Dave Peterson" wrote in message ... Put the code in a General module (insert|module type) Gary Keramidas wrote: tom: that's what i thought, but every function i test gives me the #name? error i type this =ishappy(19) i get #name? i've tried it on the sheet and workbook code pages. what am i doing wrong? -- Gary "Tom Ogilvy" wrote in message ... Demo'd from the immediate window ? ishappy(19) True ? ishappy(20) False in a worksheet it would be =ishappy(19) or =ishappy(B9) where B9 contains 19 from code, call it like any function that returns a boolean result. Dim lngVal as Long lngVal = 19 If ishappy(lngVal) then -- Regards, Tom Ogilvy "Gary Keramidas" <GKeramidasATmsn.com wrote in message ... can i ask how this is executed? -- Gary "Tom Ogilvy" wrote in message ... Function IsHappy(num As Long, _ Optional flag As Boolean = True, _ Optional cnt As Long = 1) Static orig As Long Dim n1 As Long Dim str As Long Dim tot As Long If flag Then orig = 0 End If If num < 1 Then cnt = cnt + 1 tot = 0 sStr = CStr(num) For i = 1 To Len(sStr) n1 = CLng(Mid(sStr, i, 1)) tot = tot + n1 ^ 2 Next If tot = 1 Then IsHappy = True ElseIf cnt 30 Then IsHappy = False Else If flag Then orig = tot IsHappy = IsHappy(tot, False, cnt) End If End Function -- Regards, Tom Ogilvy "alvin Kuiper" wrote in message ... Hi! I want to check if a number is a happy number a number number is like this (sorry i can't write it correct with in 2 hope you understand) Number is 19 1 in 2 + 9 in 2 = 82 8 in 2 + 2 in 2 = 68 6 in 2 + 8 in 2 = 100 1 in 2 + 0in 2 + 0in 2 = 1 This is not a Happy number Number = 24 2in2 + 4in2 = 20 2in2 + 0in2 = 4 So only when the last ciffer is one it is a happy number I can make it by using if and if and if........................... But isn't there a easy way to do this? Please help i can't see it.......... Best regards Alvin -- Dave Peterson |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Excel Data Validation/Lookup function does function correcty | Excel Worksheet Functions | |||
LINKEDRANGE function - a complement to the PULL function (for getting values from a closed workbook) | Excel Worksheet Functions | |||
Offset function with nested match function not finding host ss. | Excel Worksheet Functions | |||
Formatering af Dato m. klokkeslæt som et tal - speciel | Excel Worksheet Functions | |||
User-Defined Function pre-empting Built-in Function? How to undo???? | Excel Programming |