2

我正在寻找一个简单的程序,它将二进制数转换为十进制数,而不使用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. 我知道我需要使用一个循环,这个循环应该乘以 2numberInput.length() - 1 - i倍。但我很难实现这一点。

4

4 回答 4

3

解析你String的整数并提供它的基础2

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

但请记住,整数的最大值是2^31-1二进制中的哪个:

1111111111111111111111111111111

因此,java.lang.NumberFormatException如果您输入比上述更大的二进制值,您将得到错误,要解决此问题,请使用BigInteger,

int decimalValue = new BigInteger(yourBinaryString, 2).intValue()
于 2015-02-03T19:45:16.460 回答
2

Integer让您通过指定base输入的数字来做到这一点:

Integer.parseInt("101101101010111", 2); 

这不使用Math.pow:)

这可能不是您想要的,但无论如何可能对任何人都有帮助。

于 2015-02-03T19:45:16.440 回答
1

您可以使用 Integer.parseInt。

这里已经回答了类似的问题:

如何将二进制字符串值转换为十进制

唯一的区别是在上面引用的答案中,他们将字符串(“01101”)转换为十进制整数。

还要参考 Javadoc Integer.parseInt

于 2015-02-03T19:55:44.060 回答
1

我将从字符串的末尾向后工作,并逐步计算每个字符的功率:

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;
}
于 2015-02-03T19:47:15.397 回答