Qualcuno mi può dare qualche idea su come far scomporre un numero in una somma di potenze del 2?
(ad esempio vorrei che se io scrivessi 1183 me lo scomponesse come 2^10+2^7+2^4+2^3+2^2+2^1+2^0)
Qualcuno mi può dare qualche idea su come far scomporre un numero in una somma di potenze del 2?
(ad esempio vorrei che se io scrivessi 1183 me lo scomponesse come 2^10+2^7+2^4+2^3+2^2+2^1+2^0)
Prova con queste istruzioni
nm = 1183
st$ = ""
For i = 40 To 0 Step -1
' potenze di 2
potenza2 = 2 ^ i
If nm >= potenza2 Then
nm = nm - potenza2
st$ = st$ + "2^" + Format$(i) + "+"
End If
Next i
' toglie l'ultimo segno più in eccesso
st$ = Left$(st$, Len(st$) - 1)
Print st$
Ciao
Grazie dell'aiuto, il tuo codice funziona benissimo, però solo se mn lo inseirsco io manualmente. Se provo ad assegnare un numero ad mn da textbox invece me lo scompone sempre come 2^40... secondo te cosa sbaglio?
Questo è il codice come lo ho modificato io...
in ogni caso grazie tantissimo dell'aiuto
Private Sub Command1_Click()
nm = Text1
st$ = ""
For i = 40 To 0 Step -1
' potenze di 2
potenza2 = 2 ^ i
If nm >= potenza2 Then
nm = nm - potenza2
st$ = st$ + "2^" + Format$(i) + "+"
End If
Next i
' toglie l'ultimo segno più in eccesso
st$ = Left$(st$, Len(st$) - 1)
Print st$
End Sub
Metti una val nella prima istruzione
nm = Val(Text1.Text)
st$ = ""
For i = 40 To 0 Step -1
' potenze di 2
potenza2 = 2 ^ i
If nm >= potenza2 Then
nm = nm - potenza2
If nm = 0 Then Exit For
st$ = st$ + "2^" + Format$(i) + "+"
End If
Next i
' toglie l'ultimo segno più in eccesso
st$ = Left$(st$, Len(st$) - 1)
Print st$
In compenso io avevo dimenticato un'istruzione la
if nm = 0 Then Exit For
che inseriva in fondo alla stringa sempre e comunque 2^0 anche per
i numeri pari, adesso dovrebbe funzionare.
Ciao
Ora funziona, però ho tolto
if nm = 0 Then Exit For
perchè altrimenti non mi metteva mai il 2^0, senza me lo mette solo per i numeri dispari.
Grazie tantissimo del tuoi aiuto.