java - 使用递归将二进制整数转换为十进制整数
问题描述
我无法让这种将整数从二进制转换为十进制的方法正常工作。我发现的主要问题是,对于以 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);
}
}
推荐阅读
- npm - 如何使用 npm 包创建类似于 create-react-app 的应用程序?
- highcharts - R Highcharter:点击类别的不同显示和价值
- c# - 如何使用 Microsoft Graph API 更新 MailboxSettings
- angular - 使用 Angular Reactive Form 将已更改的字段保存在列表中
- python - 终端命令和 Python 代码在 Bash 脚本中不起作用
- python-3.x - 设置硬 Val acc 限制在 Keras 中保存哪些模型?
- keras - 平均平均精度 (mAP) 度量 keras
- javascript - 进行异步调用以从量角器内的 REST 端点获取测试数据的正确方法?
- java - 访问 Thingworx Persistence Provider 的 JDBC URL
- flutter - Flutter:为什么 Image.network 无法加载图像