我无法让这种将整数从二进制转换为十进制的方法正常工作。我发现的主要问题是,对于以 0 结尾的二进制数,程序会忽略最后一个 0。例如,如果我输入 1010,程序将返回 5 而不是 10。以下是我进行此转换的方法。
public int toDecimal(int inBase2){
int num = 0;
if(inBase2 < 0){
num = -1;
return num;
}
if(inBase2 == 0 && num == 0){
return num;
}else{
num = inBase2 % 10 * (int)(Math.pow(2, Math.log10(inBase2)));
return num + toDecimal(inBase2 / 10);
}
}
我将如何修复程序以使其能够正确读取二进制整数中的最后一个 0?
您正在以错误的方式进行计算。二进制数中的最低有效数字被视为最高有效数字。如此有效,1010 返回 0101 的结果。现在,您处理的第一个数字(在个位)乘以Math.pow(2, Math.log10(inBase2))
,并赋予最大权重。相反,您应该将递归函数的结果相乘,这样后面的调用(代表更高值的数字)就会相乘更多。示例
public int toDecimal(int inBase2){
int num = 0;
if(inBase2 < 0){
num = -1;
return num;
}
if(inBase2 == 0 && num == 0){
return num;
}else{
num = inBase2 % 10;
return num + 2 * toDecimal(inBase2 / 10);
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句