【问题标题】:Binary to Int Using Recursion使用递归将二进制转换为 Int
【发布时间】:2018-08-28 20:12:54
【问题描述】:
我有以下代码用于将二进制转换为 int 的递归函数:
public static int binaryToInt( String b ) {
if(b.length() < 2) {
return 0;
}
return b.charAt(0) * (int) Math.pow(2, b.length()) + binaryToInt(b.substring(1));
}
我没有得到正确的值,例如:“101”我得到 584。
我认为我的逻辑是正确的,但有人可以指出我哪里出错了吗?
【问题讨论】:
标签:
java
recursion
binary
【解决方案1】:
有不少问题
b.charAt(0) * ... - 您将字符的 ASCII 值与 int 相乘。将其更改为b.charAt(0) - '0' 以获取实际整数。
Math.pow(2, b.length()) - 它必须是Math.pow(2, b.length() - 1)。用笔和纸处理几个样本就可以解释这一点。
- 基本条件错误。当没有更多字符时,您需要返回。所以,一定是
if(b.length() == 0)
【解决方案2】:
第一:
我更改了您的基本标准以允许计算中的所有位:
if(b.length() <= 0) {
return 0;
}
第二个: b.charAt(0) 返回 ASCII 值而不是整数,因此使用以下命令将其设为整数:(b.charAt(0) - '0')
第三:每个位置的幂都是length-1,所以修改如下:
Math.pow(2, b.length()-1)
最终解决方案:
请查看最终解决方案:
public static int binaryToInt( String b ) {
if(b.length() <= 0) {
return 0;
}
return (b.charAt(0) - '0') * (int) Math.pow(2, b.length()-1) + binaryToInt(b.substring(1));
}
【解决方案3】:
您的代码有以下错误:
b.charAt(0)- 返回字符的 ASCII 值,表示结果为
计算为 ASCCI 值(即如果 b.charAt(0) 返回 1 则其对应
ASCII 值为 49)。
if (b.length()
将 Math.pow(2, b.length()) 修改为 Math.pow(2, b.length()-1)
代码如下:
public static int binaryToInt( String b ) {
if(b.length() < 2) {
if(b.charAt(0)=='1')
return 1;
return 0;
}
return Character.getNumericValue(b.charAt(0)) * (int) Math.pow(2, b.length()-1) + binaryToInt(b.substring(1));
}