Convertir nombre en base donné (JAVA)
Fermé
Rakada
-
24 janv. 2014 à 18:18
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 25 janv. 2014 à 20:58
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 25 janv. 2014 à 20:58
Bonjour,
Le titre n'est pas très clair je vous l'accorde mais je voulais faire simple et court ! Bref je suis en terminal et je travaille sur un mini projet ou je bloque pas mal. Le but est de convertir un nombre N donné en représentation décimale vers une base b quelconque choisie par l'utilisateur. La base b devras être comprise entre 2 et 36 inclus. Je pensé faire un modulo pour avoir le reste et une division pour avoir le chiffre du modulo, bref c'est un peu casse-tête ! Voilà j'aurais aimé avoir des idées pour comment parvenir à mes fins !
Merci d'avance.
PS : je précise que je code avec Java avec le logiciel Java's cool.
Le titre n'est pas très clair je vous l'accorde mais je voulais faire simple et court ! Bref je suis en terminal et je travaille sur un mini projet ou je bloque pas mal. Le but est de convertir un nombre N donné en représentation décimale vers une base b quelconque choisie par l'utilisateur. La base b devras être comprise entre 2 et 36 inclus. Je pensé faire un modulo pour avoir le reste et une division pour avoir le chiffre du modulo, bref c'est un peu casse-tête ! Voilà j'aurais aimé avoir des idées pour comment parvenir à mes fins !
Merci d'avance.
PS : je précise que je code avec Java avec le logiciel Java's cool.
A voir également:
- Convertir nombre en base donné (JAVA)
- Waptrick java football - Télécharger - Jeux vidéo
- Jeux java itel football - Télécharger - Jeux vidéo
- Convertir youtube en mp3 avec audacity - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Java apk - Télécharger - Langages
1 réponse
KX
Messages postés
16755
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
12 février 2025
3 020
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.