我的代码是打印用户输入的二进制数的十进制等价物。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
System.out.print("Enter a binary integer: ");
int b=in.nextInt();
int digits=1;
int q=b;
//determine the number of digits
while(q/10>=1){
++digits;
q/=10;
}
System.out.println(digits);
int decimal=0;
int i=0;
//pick off the binary number's digits and calculate the decimal equivalent
while(i<=digits-1){
decimal+=b/Math.pow(10,i)%10*Math.pow(2,i);
i++;
}
System.out.println(decimal);
}
}
当我输入 1101 时,它输出 13,这是正确答案。然而,当我 测试数字 11001,十进制等效值应该是 25,但它输出 26。我试试 修复它但无法找到错误所在。你们能帮帮我吗?
最佳答案
问题是 Math.pow
返回一个 float ,而您却在进行浮点计算,而您认为自己在进行整数计算。当 i
为 4 时,您计算
b/Math.pow(10,i)%10*Math.pow(2,i);
计算是这样的:
b = 11001
b / Math.pow(10,i) = b / 10000 = 1.1001 (not 1)
1.1001 % 10 = 1.1001
1.1001 * Math.pow(2,i) = 1.1001 * 16 = 17.6016 (not 16)
当您将它添加到 decimal
时,它会被转换为 (int)
。它将最后一个值截断为 17,但为时已晚。
将 Math.pow
结果转换为 (int)
将使其工作。但这无论如何都不是正确的方法。如果您想自己学习如何做而不是使用 parseInt
,最好将数字输入为 String
(请参阅我之前的评论),然后您就不需要无论如何,根本不必担心将这些位选为十进制数字或 10 的幂。即使使用您的方法,而不是 Math.pow
,保留您用 powerOf10 修改的
在每个循环迭代中。powerOf10
和 powerOf2
整数变量会更简单*= 10; powerOf2 *= 2;
关于java - 在java中打印二进制数的十进制等价物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22492470/