3pi*_*que 3 java binary decimal
我的代码是打印用户输入的二进制数的十进制等值.
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);
}
}
Run Code Online (Sandbox Code Playgroud)
当我输入1101时,它输出13,这是正确的答案.但是,当我测试数字11001时,十进制等值应该是25,但它输出26.我尝试修复它但无法找到bug的位置.你能帮助我吗?
问题是Math.pow返回一个浮点数,你正在进行浮点计算,你认为你正在进行整数计算.什么时候i是4,你计算
b/Math.pow(10,i)%10*Math.pow(2,i);
Run Code Online (Sandbox Code Playgroud)
计算如下:
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)
Run Code Online (Sandbox Code Playgroud)
然后(int)在添加时将其强制转换为decimal.它将最后一个值截断为17,但为时已晚.
将Math.pow结果转换为a (int)将使其工作.但无论如何,这不是正确的方法.如果你想学习如何自己而不是使用parseInt它,最好输入数字作为String(参见我之前的评论),然后你不必担心将这些位作为十进制数字或10的幂来取消无论如何.即使使用您的方法,在每次循环迭代中Math.pow保留powerOf10和powerOf2修改的整数变量也会更简单powerOf10 *= 10; powerOf2 *= 2;.