Salut, j'ai chercher pendent un moment et j'ai trouver de l'aide pour convertir
un nombre qui est en base 10 (0123456789) vers base 9 sans 0 (123456789)
(c'est pas vraiment ce terme mais bon...)

On m'as aidé et voici le code en question que j'ai convertie en PB.Net:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
Function Transformer(ByVal Int64 As Int64) As Int64
 
        ' À toutes les dizaines on est décalé d'une unité, ça donne une Retenue
        Dim Retenue As Int64 = (Int64 - 1) \ 9
 
        ' On ajoute la Retenue au résultat
        Dim Resultat As Int64 = Int64 + Retenue
 
        ' Pour l'instant on n'a modifié que les unités ajoutés toutes les dizaines, il faut aussi ajouter
        ' tous les blocs de 0 qui apparaissent 10 fois toutes les centaines, 100 fois tous les milliers, etc.
 
        ' Sans oublier qu'à chaque fois qu'on ajoute une Retenue celle-ci décale le résultat, il faut donc
        ' calculer aussi la Retenue de la Retenue !
 
        ' 1 = unités, 10 = dizaines, 100 = centaines...
        Dim Rang As Int64 = 1
 
        ' On s'arrête quand il n'y a plus de Retenue à ajouter
        While Retenue > 0
 
            ' Nouvelle Retenue à ajouter
            Retenue = (10 * Rang) * ((Retenue - 1) \ (9 * Rang))
 
            ' Ajout de la Retenue
            Resultat += Retenue
 
            ' Passage au Rang suivant
            Rang *= 10
 
        End While
 
        Return Resultat
 
    End Function
 
    Sub Main()
 
        Console.WriteLine(Transformer(1000))
        Console.ReadLine()
 
    End Sub
Ce code est fonctionnel et très rapide, on peut surement l'améliorer mais c'est pas la priorité là

Bien, on m'as de même aider pour crée le code inverse en Purebasic qui fonctionne très bien mais convertie en VB.Net plus rien ne marche, serais t-il possible de corriger ou me dire se qui ne va pas svp
Ce code permet en théorie de convertir un nombre convertie sans 0 avec 0


Voici le code PureBasic:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
Procedure  PowQ(nombre_q, puissance, resultat_q)
  resultat_q = 1
  For j = 1 To puissance
    resultat_q * nombre_q
  Next
  ProcedureReturn resultat_q
EndProcedure
 
Procedure.q  Decoder(Nombre.q)
  Protected.q res, div10, mul9, c1, c2, reste, chiffre
  Protected i.l, j.l
 
  res = Nombre
  nb_chiffre = IntQ(Log10(Nombre)) + 1
 
  ;    div10 = Pow(10, nb_chiffre); ne fonctionne pas avec des Quad
  div10 = PowQ(10, nb_chiffre, div10)
 
  ;   mul9 = Pow(9, nb_chiffre - 1); ne fonctionne pas avec des Quad
  mul9 = PowQ(9, nb_chiffre - 1, mul9)
 
  For i = nb_chiffre - 1 To 1 Step -1
    div10 / 10
 
    c1 = Nombre / div10
    chiffre = IntQ(c1) - IntQ(c1 / 10) * 10
 
    mul9 / 9
    res = res - i * mul9 * (chiffre + reste)
 
    reste = reste * 10 + chiffre
  Next
 
  ProcedureReturn res
EndProcedure
 
Debug Str(DeCoder(27726677999))

Voici le code VB.Net:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Function PowQ(ByVal NombreQ As Int64, ByVal Puissance As Int64, ByVal ResultaQ As Int64) As Int64
        ResultaQ = 1
        For j = 1 To Puissance
            ResultaQ *= NombreQ
        Next
        Return ResultaQ
    End Function
 
    Function Décode(ByVal Nombre As Int64) As Int64
 
        Dim Res As Int64 = Nombre
        Dim Div10 As Int64 = 0
        Dim Mul9 As Int64 = 0
        Dim C1 As Int64 = 0
        Dim Reste As Int64 = 0
        Dim Chiffre As Int64 = 0
        Dim NombreChiffre As Int64 = CLng(Fix(Math.Log10(Nombre))) + 1
 
        Res = Nombre
 
        Div10 = PowQ(10, NombreChiffre, Div10)
        Mul9 = PowQ(9, NombreChiffre - 1, Mul9)
 
        For i = NombreChiffre - 1 To 1 Step -1
            Div10 \= 10
 
            C1 = CLng(Nombre \ Div10)
 
            Chiffre = CLng(Fix(C1) - Fix(CLng(C1) \ 10) * 10)
 
            Mul9 \= 9
            Res = CLng(Res - (i * Mul9 * (Chiffre + Reste)))
 
            Reste = CLng(Reste * (10 + Chiffre))
        Next
 
        Return Res
 
    End Function
 
    Sub Main()
        Console.WriteLine(Décode(1331))
        Console.ReadLine()
    End Sub
Dans cette exemple 1000 convertie sans 0 = 1331
A l'inverses le résulta devrais être: 1331 = 1000