Convertir nombre en base donné (JAVA)
Fermé
Rakada
-
24 janv. 2014 à 18:18
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 25 janv. 2014 à 20:58
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 - 25 janv. 2014 à 20:58
A voir également:
- Convertir nombre en base donné (JAVA)
- Waptrick java football - Télécharger - Jeux vidéo
- Convertir youtube en mp3 avec audacity - Guide
- Java apk - Télécharger - Langages
- Formules excel de base - Guide
- Jeux java itel football - Télécharger - Jeux vidéo
1 réponse
KX
Messages postés
16734
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
24 avril 2024
3 015
24 janv. 2014 à 19:36
24 janv. 2014 à 19:36
"en représentation décimale vers une base b quelconque"
Attention au vocabulaire, si c'est une base 'b' ce n'est pas décimal (sauf si b=10...)
"Je pensé faire un modulo pour avoir le reste et une division pour avoir le chiffre du modulo"
L'idée est bonne, c'est comme ça qu'il faut que tu fasses.
"La base b devras être comprise entre 2 et 36 inclus"
Ce ne sont pas des valeurs prises au hasard, Java aussi le fait sur cet intervalle, cela permet de manipuler un alphabet avec les 10 chiffres et 26 lettres.
Rappel :
Attention au vocabulaire, si c'est une base 'b' ce n'est pas décimal (sauf si b=10...)
"Je pensé faire un modulo pour avoir le reste et une division pour avoir le chiffre du modulo"
L'idée est bonne, c'est comme ça qu'il faut que tu fasses.
"La base b devras être comprise entre 2 et 36 inclus"
Ce ne sont pas des valeurs prises au hasard, Java aussi le fait sur cet intervalle, cela permet de manipuler un alphabet avec les 10 chiffres et 26 lettres.
Rappel :
N = n0 + 10.n1 + 100.n2 + 1000.n3... = n0 + 10.( n1 + 10.( n2 + 10.( n3... )))
= b0 + b.b1 + b².b2 + b³.b3... = b0 + b.( b1 + b.( b2 + b.( b3 ... )))
24 janv. 2014 à 23:41
= b0 + b.b1 + b².b2 + b³.b3... = b0 + b.( b1 + b.( b2 + b.( b3 ... )))"
Que signifie cette égalité ?
25 janv. 2014 à 12:28
Exemple en décimal : 1234 = 4 + 3*10 + 2*100+ 1*1000 = 4 + 10 * ( 3 + 10 * ( 2 + 10 * (1 )))
C'est comme cela qu'on en déduit la décomposition par division et reste successive.
[ 4 + 10 * ( 3 + 10 * ( 2 + 10 * (1 ))) ] / 10 = ( 3 + 10 * ( 2 + 10 * (1 ))) il reste 4
[ 3 + 10 * ( 2 + 10 * (1 )) ] / 10 = ( 2 + 10 * (1 )) il reste 3
[ 2 + 10 * (1 ) ] / 10 = ( 1 ) il reste 2
[ 1 ] / 10 = 0 il reste 1
On récupère bien les chiffres 1,2,3,4 de la décomposition de 1234 en base 10.
Tu peux faire pareil dans n'importe quelle base, en divisant N par b tu obtiens b0 en reste et le quotient N' = b1 + b.( b2 + b.( b3 ... )) permet de calculer ensuite b1, b2, b3...
Exemple en hexadécimal :
1234 / 16 = 77 il reste 2
77 / 16 = 4 il reste 13
4 / 16 = 0 il reste 4
Donc 1234 = 2 + 16 * (13 + 16 * (4)) = 2 + 16 * 13 + 16² * 4
Les chiffres hexadécimaux de 1234 sont donc 4, 13, 2, que l'on représentera "4d2"
25 janv. 2014 à 20:39
Après par contre je ne sais pas si il faut que je répète ça pour chaque chiffre entré en plus, j'aimerais faire plus simple pour n'importe quel nombre car le programme que je viens de faire de marche que pour un nombre de 4 chiffre pas plus. Pour faire plus il faudrait que je rajoute des b3 et r3, etc mais je pense qu'on peut faire plus simple mais je ne vois pas :/ .
PS: le résultat obtenus en tapant 1234 en base de 16 et bien 4d2 ;)
25 janv. 2014 à 20:58
En plus c'est "de la triche", le but de ton programme c'est de tout faire toi même, sinon tu utiliserais directement la méthode Integer.toString(n,b) qui fait déjà tout.
"il faudrait que je rajoute des b3 et r3"
Effectivement, d'autant que si tu prends des bases petites, tu vas avoir beaucoup de chiffres.
Par exemple 1234 donne "10011010010" en base 2... si tu gardes que b0, b1, b2 tu ne pourrais pas dépasser n=7 pour la base 2, c'est franchement peu !
Il faut donc que tu utilises une boucle, afin d'avoir autant de b/r que nécessaire sans avoir à tous les coder toi même les uns à la suite des autres.