【问题标题】:Converting binary to decimal using recursive method使用递归方法将二进制转换为十进制
【发布时间】:2016-06-27 09:30:42
【问题描述】:

我已经完成了很多工作,但我不知道在我的递归方法的论证中要添加什么。我不知道在 num1 = (Math.pow(base,(binToDecimal(s.length()-1)))); 中放入什么。 s.length()-1 不起作用,因为它不是字符串,但我不知道在这里放什么。我的递归方法是否也适用于我的基本情况?我的想法是,每次它都会将字符串的长度减一,并且会在字符串的长度为零时停止,但我认为它不起作用。你也可以使用 Math.pow 来做到这一点吗?我在网上看到了其他一些解决方案,但没有一个使用 Math.pow

public static int binToDecimal(String s)
{
    //base case
    if(s.equals("1"))
        return 1;
    if(s.equals("0"))
        return 0;

    int num1 = 0;
    int finalAnswer = 0;
    int base = 2.0;
    //recursive case        
    if(s.length() > 1)
        num1 = (Math.pow(base,(binToDecimal(s.length()-1))));
        finalAnswer = num1 + finalAnswer;
    return
        finalAnswer;
}

【问题讨论】:

    标签: java recursion binary converter


    【解决方案1】:

    这是递归算法的另一个版本。每次迭代取最后一个二进制数字,计算字符串其余部分的二进制值乘以 2(向左移动),然后将最后一个数字的值加到它上面。

    public int binChar(char c) {
        return c == '1' ? 1 : 0;
    }
    
    public int binToDecimal(String s) {
        switch(s.length()) {
            case 0: return 0;
            case 1: return binChar(s.charAt(0));
            default: {
                int last = s.length() - 1;
                char c = s.charAt(last);
                s = s.substring(0,last);
                return binToDecimal(s) * 2 + binChar(c);
            }
        }
    }
    

    【讨论】:

    • 感谢您的回复,但我对开关不太自信,因为我从来没有真正使用过它们。我仍在试图弄清楚我可以将什么代替 s.length()-1 放入 (binToDecimal(s.length()-1))
    • 请改用s.substring(0, s.length()-1)。无论如何,这可能就是您想要做的。
    • 感谢我让那部分工作,现在修复它,以便它给我正确的答案
    猜你喜欢
    • 2012-04-19
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 1970-01-01
    • 2021-07-09
    • 2013-09-23
    • 2020-06-19
    • 1970-01-01
    相关资源
    最近更新 更多