当前位置: 首页 > 面试题库 >

使用递归来反转整数而不使用字符串

滑令
2023-03-14
问题内容

我已经尝试了一段时间,但无法正常工作。我正在尝试一种无需使用字符串或数组即可反转整数的方法。例如,123应该以整数形式反转为321。

我的第一次尝试:

/** reverses digits of integer using recursion */
public int RevDigs(int input)
{
    int reverse = 0;
    if(input == 0)
    {
        return reverse;
    }
    int tempRev = RevDigs(input/10);
    if(tempRev >= 10)
        reverse = input%10 * (int)Math.pow(tempRev/10, 2) + tempRev;
    if(tempRev <10 && tempRev >0)
        reverse = input%10*10 + tempRev;
    if(tempRev == 0)
        reverse = input%10;   
    return reverse;
}//======================

我也尝试使用它,但是似乎弄乱了中间数字:

/** reverses digits of integer using recursion */
public int RevDigs(int input)
{
    int reverse = 0;
    if(input == 0)
    {
        return reverse;
    }
    if(RevDigs(input/10) == 0)
        reverse = input % 10;
    else
    {
        if(RevDigs(input/10) < 10)
            reverse = (input % 10) *10 + RevDigs(input/10);
        else
            reverse = (input % 10)* 10 * (RevDigs(input/10)/10 + 1) + RevDigs(input/10);
        }
    return reverse;
}

我尝试查看网站上的一些示例,但是无法使其正常工作。为了进一步说明,我不能为此项目使用String或数组,而必须使用递归。有人可以帮我解决问题。谢谢。


问题答案:

关于什么:

public int RevDigs(int input) {
    if(input < 10) {
        return input;
    }
    else {
        return (input % 10) * (int) Math.pow(10, (int) Math.log10(input)) + RevDigs(input/10);
        /* here we:
           - take last digit of input
           - multiply by an adequate power of ten
             (to set this digit in a "right place" of result)
           - add input without last digit, reversed
        */
    }
}

input >= 0当然,这是假定的。



 类似资料:
  • 我刚刚开始学习递归,并能够使用它编写一个简单的阶乘程序,没有太多问题。现在我正在尝试编写一个递归方法,该方法以相反的顺序写入数组,但我不知道我做错了什么。我错过了什么?非常感谢。

  • 我做了一个使用递归方法反转单链表的函数。然而,我在执行下面的代码时遇到了一些困难: 我应该如何在ReverseCursive函数/方法中传递第二个参数,以便执行它? 作为第二个参数,我想简单地传递链表的头节点。但是我不知道如何从类的init方法中获取头节点linked_list 我试了几件事,但都解决不了。也许我不太擅长OOP概念。有人能帮我解决这个问题吗?

  • 问题内容: 我正在尝试查找字符串中字母的首次出现。例如,苹果中的p应该返回1。这是我拥有的: 它似乎似乎没有返回正确的值。 问题答案: 您的尝试很好,但是还不够。这是基于您的正确实现: 您的尝试存在两个问题: 在这一部分中,您已经找到了角色,因此正确的做法是停止递归,但您仍在继续。 在最后一个return语句中,您需要在递归调用中加1(如果最终找到了该字符),作为累加总索引号的一种方式。

  • 我需要在 ML 中编写自己的递归函数,该函数以某种方式使用 ord 将一串数字转换为整数类型。我可以使用辅助函数,但显然我应该能够在不使用辅助函数的情况下做到这一点(根据我的教授的说法)。 我可以假设输入是有效的,并且是一个正整数(当然是字符串类型)。 因此,调用str2int("1234")应该输出1234: int 我假设我需要在某个时候使用爆炸和内爆,因为 ord 对字符进行操作,而我的输入

  • 还缺少的是将最后一个节点的next赋值为NULL。 在任何世界里,像这样的东西会起作用吗?它给出了一个运行时/分段错误。

  • 我对递归非常陌生(我需要使用它),并且在使用我的搜索方法时遇到了一些严重的逻辑问题。请看下面: 输出是长度为1的“nodeOne null,返回null节点数据”打印。我不明白最后一个else if语句中的递归语句是如何到达的,而第一个if语句中的null语句似乎也在到达。 我尝试重新排列if语句,以便是第一个,但这给了我一个。不知道我做错了什么。特别是因为我可以使用方法打印节点中的数据,所以我知