7
votes

Java - Programme de récursivité - Convertissez un numéro de base 10 à n'importe quelle base

J'essaie de convertir un numéro de base 10 à n'importe quelle base en utilisant la conversion. En ce moment, c'est le code que j'ai proposé. J'ai un sentiment triste que cela peut être complètement faux. L'image ci-dessous est un exemple de la manière dont ce processus devrait avoir lieu.

http://i854.photobucket.com/albums/ab107/tonytauart/ rrrr.png xxx

}


6 commentaires

Est-ce que ce devoir? Si tel est le cas, il devrait être étiqueté avec la balise [Homework].


Vous devez définir une base de base, disons-vous, lorsque votre numéro est inférieur à votre base, et la partie récursive, disons, les opérations pour obtenir le prochain chiffre de votre numéro converti.


Merci pour la tête Louis ... et merci aussi Luiggi, idk pourquoi je pensais avoir == 0 était une bonne idée. Je ne pense pas que cela soit même nécessaire maintenant que je le regarde


Y a-t-il des restrictions sur "n'importe quelle base"? Par exemple, êtes-vous censé prendre en charge la base 900 (pour laquelle aucun jeu de caractères standard n'est défini)?


J'ai trouvé une réponse qui explique comment convertir un entier de n'importe quelle base à une autre base: Stackoverflow.com/a/15735138/975097


@Louiswasserman Deux ans plus tard, oui, c'est mes devoirs.


5 Réponses :


10
votes
public class Converter {

    private static char symbols[] = new char[] { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T' };

    public static void main ( String args[] )
    {
                 Converter converter = new Converter ();
        System.out.println( converter.convert ( 31, 16 ));
    }

    public String convert ( int number, int base )
    {
        return convert(number, base, 0, "" );
    }

    private String convert ( int number, int base, int position, String result )
    {
        if ( number < Math.pow(base, position + 1) )
        {
            return symbols[(number / (int)Math.pow(base, position))] + result;
        }
        else
        {
            int remainder = (number % (int)Math.pow(base, position + 1));
            return convert (  number - remainder, base, position + 1, symbols[remainder / (int)( Math.pow(base, position) )] + result );
        }
    }
}
This will convert from Base 2 to Base 36, although you could expand it by adding more symbols. 

0 commentaires


13
votes

Je viens de finir de faire ce problème pour une classe Comp SCI. Je devais résoudre ce problème de manière récursive: xxx


1 commentaires

Je pense que nous apprenions du même livre. C'est exactement ce dont j'avais besoin!



3
votes

Un moyen rapide de le faire en Java est-ce: xxx

par exemple, xxx

retournerait "11111111". Je ne sais pas si vous recherchez une solution rapide ou souhaitez-vous réellement mettre en œuvre la méthode de conversion vous-même. Ce serait une solution rapide. Reportez-vous à cet article: Quelle est la méthode dans L'API de convertir entre bases?


1 commentaires

Cependant, le deuxième argument par défaut à 10 si donné> caractère.max_radix , qui est généralement de 36 (10 pour 0-9, 26 pour l'alphabet) pour le deuxième argument.



1
votes
public class Converter {

    private static char symbols[] = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
                    'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T' };

    public static void main(String args[]) {
        Converter converter = new Converter();
        System.out.println(converter.convert(31, 16));
    }

    public String convert(int number, int base) {
        return convert(number, base, 0, "");
    }

    private String convert(int number, int base, int position, String result) {
        if (number < Math.pow(base, position + 1)) {
            return symbols[(number / (int) Math.pow(base, position))] + result;
        } else {
            int remainder = (number % (int) Math.pow(base, position + 1));
            return convert(number - remainder, base, position + 1, symbols[remainder / (int) (Math.pow(base, position))] + result);
        }
    }

}

0 commentaires