@
DarkMatrix,@
Elemental Code no funcionará vuestro código al dar la vuelta al número.
eCode al pasarlo a Str el EXX que se genera con números grandes explota.
DarkMatrix tienes que hacer Fix() para que funcione correctamente el código.
Aquí mi aproximación:
Public Static Function PE4_Karcrack(Optional ByVal lCifras As Long = 3) As Double
Dim A As Double
Dim B As Long
Dim C As Long
Dim D As Long
Dim M As Long
Dim R As Double
B = (10 ^ lCifras) - 1
M = (10 ^ (lCifras - 1))
Do Until (M Mod 11) = 0
M = M + 1
Loop
D = B
Do Until (D Mod 11) = 0
D = D - 1
Loop
For A = D To M Step -11
For C = B To A * 0.8 Step -1
R = (A * C)
If R <= PE4_Karcrack Then Exit For
If R = NReverse(R) Then
PE4_Karcrack = R
End If
Next C
Next A
End Function
Public Static Function NReverse(ByVal D As Double) As Double
Dim dig As Long
While D > 0
dig = (D - Fix(D / 10#) * 10)
NReverse = NReverse * 10 + dig
D = Fix(D / 10)
Wend
End Function
Ejemplo:
Private Sub Form_Load()
Dim i As Long
For i = 2 To 5
Debug.Print i, PE4_Karcrack(i)
Next i
End Sub
Salida:
2 9009
3 906609
4 99000099
5 9966006699
6 999000000999
Al parecer el NReverse() se queda en bucle infinito con 7 cifras