【问题标题】: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】:

有不少问题

  1. b.charAt(0) * ... - 您将字符的 ASCII 值与 int 相乘。将其更改为b.charAt(0) - '0' 以获取实际整数。

  2. Math.pow(2, b.length()) - 它必须是Math.pow(2, b.length() - 1)。用笔和纸处理几个样本就可以解释这一点。

  3. 基本条件错误。当没有更多字符时,您需要返回。所以,一定是if(b.length() == 0)

【讨论】:

  • @Henry 刚刚补充说:)
【解决方案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】:

    您的代码有以下错误:

    1. b.charAt(0)- 返回字符的 ASCII 值,表示结果为 计算为 ASCCI 值(即如果 b.charAt(0) 返回 1 则其对应 ASCII 值为 49)。

    2. if (b.length()

    3. 将 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));
    
    }
    

    【讨论】:

    • 请告诉我您对答案是否满意:)
    猜你喜欢
    • 2021-02-16
    • 2012-03-20
    • 2012-04-19
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    相关资源
    最近更新 更多