在没有 math.pow( ) 的情况下将二进制转换为基数 10?
Converting binary to base 10 without 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
次。但是我很难实现这个。
Integer
让您通过指定输入数字的 base
来做到这一点:
Integer.parseInt("101101101010111", 2);
这不使用Math.pow
:)
这可能不是您想要的,但无论如何可能对任何人都有帮助。
将您的 String
解析为整数并为其提供基数 2
int decimalValue = Integer.parseInt(yourStringOfBinary, 2);
但请记住,整数的最大值为 2^31-1
,二进制为:
1111111111111111111111111111111
因此,如果您输入比上面更大的二进制值,您将得到 java.lang.NumberFormatException
错误,要解决此问题,请使用 BigInteger
,
int decimalValue = new BigInteger(yourBinaryString, 2).intValue()
我会从字符串的末尾开始逆向计算每个字符的幂:
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;
}
您可以使用 Integer.parseInt。
类似的问题已经在这里得到回答:
How to convert binary string value to decimal
唯一不同的是,在上面引用的答案中,他们将字符串 ("01101") 转换为十进制整数。
同时参考 Javadoc Integer.parseInt。
我想创建一个简单的程序,将二进制数转换为十进制数,而不使用 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
次。但是我很难实现这个。
Integer
让您通过指定输入数字的 base
来做到这一点:
Integer.parseInt("101101101010111", 2);
这不使用Math.pow
:)
这可能不是您想要的,但无论如何可能对任何人都有帮助。
将您的 String
解析为整数并为其提供基数 2
int decimalValue = Integer.parseInt(yourStringOfBinary, 2);
但请记住,整数的最大值为 2^31-1
,二进制为:
1111111111111111111111111111111
因此,如果您输入比上面更大的二进制值,您将得到 java.lang.NumberFormatException
错误,要解决此问题,请使用 BigInteger
,
int decimalValue = new BigInteger(yourBinaryString, 2).intValue()
我会从字符串的末尾开始逆向计算每个字符的幂:
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;
}
您可以使用 Integer.parseInt。
类似的问题已经在这里得到回答:
How to convert binary string value to decimal
唯一不同的是,在上面引用的答案中,他们将字符串 ("01101") 转换为十进制整数。
同时参考 Javadoc Integer.parseInt。