2016-03-12 2 views
1

У меня это много сделано, но я не могу понять, что включить в мой аргумент для моего рекурсивного метода. Я не знаю, что положить в num1 = (Math.pow (base, (binToDecimal (s.length() - 1))));. s.length() - 1 не работает, потому что это не строка, но я не знаю, что добавить сюда. Также мой рекурсивный метод подходит к моему основному делу? Моя идея заключается в том, что каждый раз она каждый раз уменьшает длину строки на единицу и останавливается, когда длина строки равна нулю, но я не думаю, что она работает. Можете ли вы также использовать Math.pow для этого? Я видел некоторые другие решения в Интернете, и никто из них не используют Math.powПреобразование двоичного в десятичное с использованием рекурсивного метода

public static int binToDecimal(String s) 
{ 
    //base case 
    if(s.equals("1")) 
     return 1; 
    if(s.equals("0")) 
     return 0; 

    int num1 = 0; 
    int finalAnswer = 0; 
    int base = 2.0; 
    //recursive case   
    if(s.length() > 1) 
     num1 = (Math.pow(base,(binToDecimal(s.length()-1)))); 
     finalAnswer = num1 + finalAnswer; 
    return 
     finalAnswer; 
} 

ответ

0

Вот еще один вариант рекурсивного алгоритма. Каждая итерация принимает последнюю двоичную цифру, вычисляет двоичное значение остальной части строки, умноженное на 2 (смещение влево) и добавляет к ней значение последней цифры.

public int binChar(char c) { 
    return c == '1' ? 1 : 0; 
} 

public int binToDecimal(String s) { 
    switch(s.length()) { 
     case 0: return 0; 
     case 1: return binChar(s.charAt(0)); 
     default: { 
      int last = s.length() - 1; 
      char c = s.charAt(last); 
      s = s.substring(0,last); 
      return binToDecimal(s) * 2 + binChar(c); 
     } 
    } 
} 
+0

Спасибо за ответ, но я не слишком уверен в переключениях, потому что я никогда не использовал их так сильно. Я все еще пытаюсь выяснить, что я могу использовать вместо s.length() - 1 в (binToDecimal (s.length() - 1)) – Anonymous

+0

Используйте 's.substring (0, s.length() - 1). Вероятно, вы все равно пытались это сделать. –

+0

спасибо, что я получил эту часть работы, теперь исправить ее, чтобы она дала мне правильный ответ – Anonymous

Смежные вопросы