2010-05-28 7 views
-6

Possible en double:
Efficient algorithm for conversion between numeral systempour convertir un nombre dans une base inconnue à la base équivalent 10 Numéro

Étant donné un entier, écrire un programme qui convertit le nombre donné à un nombre (en base 10). Astuce - Le nombre donné pourrait être dans n'importe quelle base, mais la base est inconnue.

+1

Est-ce que ceci devrait être étiqueté? –

+3

Comment est-ce possible? Quelle est la base "4"? Il pourrait être base 5, base 12, base 123 - vous avez maintenant le moyen de savoir! –

+2

Peut-être qu'il devrait lire: convertir un nombre dans la base 10 à un nombre dans une autre base? –

Répondre

11

Cela ne peut pas être fait; sans connaître la base source, le nombre est ambigu. 10 dans la base n se traduit par n dans la base 10; il y a des possibilités infinies

1

C'est facile à faire, une fois que vous avez la base.

Vous pouvez obtenir une borne inférieure pour la base, en trouvant le chiffre le plus élevé. Comme dans le nombre 175234 la base doit être au moins 8. Cependant vous ne pouvez jamais trouver une limite supérieure: Le nombre pourrait être n'importe quelle base de 8 à l'infini. Au lieu de cela, vous pouvez imprimer le numéro qui serait, étant donné que la première base était par exemple. 8, 9 ou 10. Ensuite, l'utilisateur peut décider ce qu'il pense.

8

Je suppose que par 'inconnu' vous voulez dire que l'algorithme doit être capable de gérer n'importe quelle base? Sinon, c'est tout simplement impossible.

Donc vous demandez essentiellement la fonction convert (nombre, base) = base10Number?

count = 0 
total = 0 
for each digit in number, from least significant to most significant 
    total = total + digit * base^count 
    count = count + 1 

par exemple. converti (355,8)

  • première boucle: total = 0 + 5 * 8^0 = 5
  • deuxième boucle: total = 5 + 5 * 8^1 = 45
  • troisième boucle: total = 45 + 3 * 8^2 = 237

Résultat = 237

-1

l'énoncé du problème indique que la base du nombre donné est inconnu. Ainsi, pour continuer, il faut supposer une base pour le nombre. Il est pratiquement sûr de supposer que le chiffre ayant la valeur maximale dans le nombre indique le maximum qui peut être comptabilisé dans la base inconnue. Ce numéro, par exemple, si déclaré que, 254, on peut supposer que le système de numéro se compose de chiffres 0, 1, 2, 3, 4, 5 - ou la base 6.

if(!(((ascii >= '0') && (ascii <= '9')) || ((ascii >= 'A') && (ascii <= 'Z')))) { 
    printf("Illegal number, can have only digits (0-9) and letters (A-Z)"); 

Hope this helps.

0

Ceci est une mauvaise question car considérons que le numéro 7 peut être dans le système octal, système hexadécimal. Il n'est pas possible de décider. Nous devons connaître la base des nombres d'entrée. Nous pouvons écrire comme méthode ce public

int convertToBase (int inNumber, int inBase, int outBase) {

// bla bla

retour convertedNumber; }

0

TestNumberBase public class {

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    // TODO Auto-generated method stub 

    System.out.println(converNumberTObase(100000, 2, 16)); 

} 

public static int converNumberTObase(int inNum, int inBase, int outBase) { 

    return convertDecimalToOtherBase(convertDecimalEquivalent(inNum, inBase), outBase) ; 

} 

public static int convertDecimalEquivalent(int number, int inBase) { 

    int outNumber = 0; 
    int _base =inBase; 


    while (number > 0) { 
     int digit = number % 10; 
     number = number/10; 

     outNumber = outNumber + (inBase/_base) * digit; 
     inBase = inBase*_base; 

    } 

    return outNumber; 

} 
public static int convertDecimalToOtherBase(int number, int outBase) { 

    int outNumber = 0; 
    int _base = 10, base =10; 


    while (number > 0) { 
     int digit = number % outBase; 
     number = number/outBase; 

     outNumber = outNumber + (base/_base) * digit; 
     base = base*_base; 

    } 

    return outNumber; 

} 

}

2

Vous pouvez simplement utiliser l'algorithme de Wallar pour convertir la base. L'algorithme change n base c en n base b. n est une liste des chiffres composant le numéro. Chaque chiffre peut contenir plus d'un chiffre. Voici une implémentation de l'algorithme de Wallar en Python.

from math import * 
def baseExpansion(n,c,b): 
    j = 0 
    base10 = sum([pow(c,len(n)-k-1)*n[k] for k in range(0,len(n))]) 
    while floor(base10/pow(b,j)) != 0: j = j+1 
    return [floor(base10/pow(b,j-p)) % b for p in range(1,j+1)] 
Questions connexes