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:
Ce code est fonctionnel et très rapide, on peut surement l'améliorer mais c'est pas la priorité là
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
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:
Dans cette exemple 1000 convertie sans 0 = 1331
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
A l'inverses le résulta devrais être: 1331 = 1000
Partager