Code : Tout sélectionner
Global Dim NullRef.Q(62)
Define.Q Iq
Repeat
Iq + 1
NullRef(Iq) = ((1 << Iq) - 1) << 1
Until Iq => 62
Procedure.S NelsonBin(n.Q)
Protected.Q I
Repeat
I + 1
If n < NullRef(I)
ProcedureReturn RSet(Bin(n - NullRef(I - 1), #PB_Quad), I, "0")
EndIf
ForEver
EndProcedure
Procedure.Q NelsonVal(n.S)
ProcedureReturn NullRef(Len(n) - 1) + Val("%" + n)
EndProcedure
; Exemples
For I = 0 To 7
Debug Str(I) + " " + NelsonBin(I)
Next
Debug " "
Debug NelsonVal(NelsonBin(1234567890123456789) )
Debug NelsonBin(NelsonVal("10010110100101110010001101110111110010101011100010101101001011") )