Преобразование двоичного кода в базу 10 без math.pow()?

Я ищу, чтобы создать простую программу, которая будет преобразовывать двоичные числа в десятичные числа, не используя math.pow(), Вот то, что я пока использую Math.pow в конце:

import java.util.Scanner;
public class  Question1 {
  public static void main(String[] args) {
    System.out.println("Enter a binary number");
    Scanner inputKeyboard = new Scanner(System.in);
    String binaryNumber = inputKeyboard.nextLine();
    while (!checkIfBinary(binaryNumber)) {
      System.out.println("That is not a binary number.  Enter a binary number");
      binaryNumber = inputKeyboard.nextLine();
    }
    int decimalNumber = binaryToNumber(binaryNumber);
    System.out.println("Your number in base 10 is " + decimalNumber + ".");
  }

  public static boolean checkIfBinary(String input) {
    for (int i = 0; i < input.length(); i++) {
      if(input.charAt(i) != '0' && input.charAt(i) != '1') {
        return false;
      }
    }
    return true;
  }

  public static int binaryToNumber(String numberInput) {
    int total = 0;
    for (int i = 0; i < numberInput.length(); i++) {
      if (numberInput.charAt(i) == '1')  {
        total += (int) Math.pow(2, numberInput.length() - 1 - i);
      }
    }
    return total;
  }
}

Я столкнулся с проблемой выполнения возведения в степень без math.pow, Я знаю, что мне нужно использовать цикл, и этот цикл должен умножить 2 на себя numberInput.length() - 1 - i раз. Но я испытываю трудности в реализации этого.

4 ответа

Решение

Я бы работал в обратном направлении от конца строки и просто вычислял мощность для каждого символа постепенно:

public static int binaryToNumber (String numberInput) {
    int currentPower = 1;
    int total = 0;

    for (int i = numberInput.length() - 1; i >= 0; i--) {
        if (numberInput.charAt(i) == '1')  {
            total += currentPower;
        }
        currentPower *= 2;
    }

    return total;
}

Разбери свой String целое число и обеспечить его основой 2

int decimalValue = Integer.parseInt(yourStringOfBinary, 2);

но имейте в виду, что максимальное значение целого числа 2^31-1 Который в двоичном виде:

1111111111111111111111111111111

следовательно, вы получите java.lang.NumberFormatException ошибка, если вы введете большее двоичное значение, чем указано выше, для решения этой проблемы используйте BigInteger,

int decimalValue = new BigInteger(yourBinaryString, 2).intValue()

Integer позвольте вам сделать это, указав base из введенного номера:

Integer.parseInt("101101101010111", 2); 

Это не использовать Math.pow:)

Возможно, это не то, что вы хотели, но в любом случае может помочь любому.

Вы можете использовать Integer.parseInt.

На аналогичный вопрос ответили здесь:

Как преобразовать двоичное значение строки в десятичное

Разница лишь в том, что в ответе, указанном выше, они преобразуют строку ("01101") в десятичное целое число.

Также обратитесь к Javadoc Integer.parseInt.

Другие вопросы по тегам