Вопрос по java – Java - Программа рекурсии - Конвертируйте число 10 в любую базу

6

Я пытаюсь преобразовать число 10 в любую базу с помощью преобразования. Прямо сейчас это код, который я придумал. У меня грустное чувство, что это может быть совершенно неправильно. Изображение ниже является примером того, как этот процесс должен происходить.

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

public static void main(String[] args) {


  int base;
  int number;


    Scanner console = new Scanner(System.in);

    System.out.println("Please enter the base");
        base = console.nextInt();
    System.out.println("Please enter the Number you would like to convert");
        number = console.nextInt();

        System.out.println(Converter(base, number));
}


public static int Converter(int Nbase, int Nnumber){

    int answer;
    int Rcontainer =0;
    int cnt = 0;
    int multiplier;
    int temp;
    double exp;

    if(Nnumber/Nbase == 0){
        cnt++;
        exp = Math.pow(10,cnt); 
        multiplier = (int)exp;
         answer = (Nnumber%Nbase)* multiplier + Rcontainer;


    }
    else
      {
       exp = Math.pow(10,cnt);
       multiplier = (int)exp;
       cnt++;
       temp = Rcontainer;
       Rcontainer = (Nnumber%Nbase)* multiplier + temp;   

       Nnumber = Nnumber/Nbase;
        answer = Converter(Nbase,Nnumber);
       }  
        return answer;
}

}

Это домашнее задание? Если это так, он должен быть помечен тегом [homework]. Louis Wasserman
спасибо за заголовки, Луис ... и спасибо, Луигги, ИДК, почему я подумал, что иметь == 0 было хорошей идеей. Я не думаю, что это даже нужно сейчас, когда я на это смотрю user878034
Вы должны определить базовый случай, скажем, когда ваш номер меньше вашей базы, и рекурсивную часть, скажем, операции, чтобы получить следующую цифру вашего преобразованного числа Luiggi Mendoza
Существуют ли ограничения на «любую базу»? Например, ожидается ли поддержка стандарта 900 (для которого стандартный набор символов не определен)? Jonathan Grynspan
Я нашел ответ, который объясняет, как преобразовать целое число из любой базы в любую другую базу:stackoverflow.com/a/15735138/975097 Anderson Green

Ваш Ответ

5   ответов
1
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);
        }
    }

}
3

Integer.toString(int i,int radix);

Например,

Integer.toString(255,2)

вернул бы "11111111". Я не уверен, что вы просто ищете быстрое решение или действительно хотите реализовать метод конвертации самостоятельно. Это было бы быстрое решение. Обратитесь к этому сообщению:Какой метод в API для преобразования между базами?

Error: User Rate Limit ExceededCharacter.MAX_RADIXError: User Rate Limit Exceeded
12

был решить это рекурсивно:

public static String convert(int number, int base)
{
    int quotient = number / base;
    int remainder = number % base;

    if (quotient == 0) // base case
    {
        return Integer.toString(remainder);      
    }
    else
    {
        return convert(quotient, base) + Integer.toString(remainder);
    }            
}
Error: User Rate Limit Exceeded
10
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 );
        }
    }
}

хотя вы можете расширить его, добавив больше символов.

Error: User Rate Limit Exceeded user878034
2

в базу 2), попробуйте следующий код:

Integer.parseInt(Integer.toString(numberToConvert,base))

Для конкретно базы 2:

Integer.parseInt(Integer.toBinaryString(numberToConvert))

целое число содержит другие методы, такие как toHexString, которые могут быть использованы. Они предполагают, чтоnumberToConvert находится в базе 10.

Error: User Rate Limit Exceeded

Похожие вопросы