当前位置:  开发笔记 > 编程语言 > 正文

使用递归将特定基数中的数字转换为十进制数

如何解决《使用递归将特定基数中的数字转换为十进制数》经验,为你挑选了1个好方法。

我的任务是创建一个递归方法makeDecimal,当传递一个数字(由String表示)及其基数时,将数字转换为基数10.您将需要使用该方法Integer.parseInt(str).(提示:使用子串.)此方法采用a String并返回它的整数形式.

例如,Integer.parseInt("21");将返回int 21.

以下是makeDecimal如何工作的一些示例:

makeDecimal("11", 2) 将返回3.

makeDecimal("100", 4) 将返回16.

这是我的尝试:

public static double makeDecimal(String number, int base){
    int len = number.length();
    double f = 0;

    if(len <= 0)
        return 0;
    else{
        makeDecimal(number,base);

        double temp = Integer.parseInt(number.substring(len - 1, len + 1));
        f = f + temp * Math.pow(3, len-1);
    }

    len--;
    return f;
}

但是,我收到"溢出错误",我不知道它是否写得正确.



1> Ted Hopp..:

您正在使用与传入的完全相同的参数进行递归.因此,调用本身将以相同的方式递归,直到堆栈溢出.这不是递归应该如何工作的.相反,您需要弄清楚如何在当前调用中执行一个问题,然后递归以解决较小的问题.

在你的代码中,你甚至不清楚你正在使用什么逻辑.(计算3 len-1有什么意义?)试试这个:

如果输入字符串的长度为0,则答案为0(您正确的那部分)

否则,取最后一位数字并在当前基数中解析它.然后答案是该值加上base所有值的值乘以但不包括输入的最后一位数.(提示:这是使用递归的好地方.)

您应该能够将该描述转换为适当的方法调用和使用substring().

哦,还有一件事:这里没有理由使用double值.只需坚持使用int变量.你不需要Math.pow().

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有