Java 使用递归在每个偶数数字后添加0

Java 使用递归在每个偶数数字后添加0,java,recursion,Java,Recursion,大家好, 我想和你分享我的问题。我正在练习递归方法,我注意到有一个练习。本练习是关于制作递归方法,该方法将每个偶数数字加上一个0。如果有人有一些想法,如果你能在这里分享就太好了 代码如下所示: public static String adding0AfterEvenNumber(int number) { String s = String.valueOf(number); String result; if (number < 10 && n

大家好,

我想和你分享我的问题。我正在练习递归方法,我注意到有一个练习。本练习是关于制作递归方法,该方法将每个偶数数字加上一个0。如果有人有一些想法,如果你能在这里分享就太好了


代码如下所示:

public static String adding0AfterEvenNumber(int number) {

    String s = String.valueOf(number);
    String result;
    if (number < 10 && number % 2 == 0) {
        return s + 0;
    }
}
public静态字符串adding0AfterEvenNumber(整数){
字符串s=String.valueOf(数字);
字符串结果;
if(数字<10&&number%2==0){
返回s+0;
}
}
我缺少代码的主要部分,但我真的不知道如何创建它。提前谢谢


考虑此代码(行中的注释)

输出


结果:1203405607

您将递归如下:

public static String adding0AfterEvenNumber(int number) {
    return ((number >= 10) ? adding0AfterEvenNumber(number / 10) : "") + String.valueOf(number % 10) + ((number % 2 == 0) ? "0" : "");
}
add0onEven(1234567, 0, 7)
试试看


我知道偶数数字是那些偶数值不在偶数位置的数字。下面的函数应该返回一个带有该值的字符串,不过如果将头值移动到尾值的位数,则可以返回一个整数

    public String add0onEven(int number, int initPos, int endPos) {
    if (initPos == endPos - 1) {
        int digit = (number / (int) Math.pow(10, initPos)) % 10;
        if (digit % 2 == 1) {
            return digit + "0";
        } else {
            return "" + digit;
        }
    } else if (endPos - initPos < 1) {
        return "";
    } else {
        int sepIdx = (endPos - initPos) / 2 + initPos;
        String tail = add0onEven(number, initPos, sepIdx);
        String head = add0onEven(number, sepIdx, endPos);
        return head + tail;
    }
}
为此调用获得的输出:

10230450670

我相信这个解决方案比子字符串更好,因为它对内存的影响更小(无需在每次子字符串调用时创建新字符串)。此外,它遵循一种更适合递归的分而治之的方法。

您是想用零替换值还是附加零?示例:2应该变成20还是0?简单地添加零不会改变值。假设代码的递归调用部分在分解代码中丢失。并且似乎不需要处理负数和整数溢出?@DonPeat添加dude,就像您的示例一样。2应该成为20@Jedi它不是必需的,但它可能是方法的一部分。虽然OP的原始签名需要一个int输入和一个字符串返回值,但又好又快。@Jedi根据OP代码,我不确定是否需要像这样的方法签名。这种方法的好处是需要花费大量的时间number@ScaryWombat它工作得很好,伙计,我永远也不会有和StringBuilder一起工作的想法。非常感谢。我做到了,兄弟@ScaryWombatThanks兄弟,它起作用了。我一直在外面,所以不能早点回答你。我真的很喜欢你不加任何东西的想法,再次谢谢
10230450670