I used to like Erel's quizzes but he doesn't seem to post them anymore. So it thought I post a little problem. Recently I needed to find the length of an integer. Actually I needed to find the length of lots of integers. There are lots of ways to do this.
Cast to a String and get the length:
Use some maths:
Lots and Lots of If statements:
One of these subs is significantly faster. Which one is it? No cheating by running the code!
Cast to a String and get the length:
B4X:
Sub LengthOfLong1(n As String) As Int
Return n.Length
End Sub
Use some maths:
B4X:
Sub LengthOfLong2 (n As Long) As Int
Return Logarithm(n,10)+1
End Sub
Lots and Lots of If statements:
B4X:
Sub LengthOfLong3 (n As Long) As Int
If n < 10000 Then
If n < 100 Then
If n < 10 { Then
Return 1
Else
Return 2
End If
Else
If n < 1000 Then
Return 3
Else
Return 4
End If
End If
Else
If n < 1000000000000 Then
If n < 100000000 Then
If n < 1000000 Then
If n < 100000 Then
Return 5
Else
Return 6
End If
Else
If n < 10000000 Then
Return 7
Else
Return 8
End If
End If
Else
If n < 10000000000 Then
If n < 1000000000 Then
Return 9
Else
Return 10
End If
Else
If n < 100000000000 Then
Return 11
Else
Return 12
End If
End If
End If
Else
If n < 10000000000000000 Then
If n < 100000000000000 Then
If n < 10000000000000 Then
Return 13
Else
Return 14
End If
Else
If n < 1000000000000000 Then
Return 15
Else
Return 16
End If
End If
Else
If n < 1000000000000000000 Then
If n < 100000000000000000 Then
Return 17
Else
Return 18
End If
Else
Return 19
End If
End If
End If
End If
End Sub
One of these subs is significantly faster. Which one is it? No cheating by running the code!