Преобразование двоичного кода в базу 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.