使用递归反转整数,而不在C++尾随 0

Using recursion to reverse an integer without trailing 0's in C++

本文关键字:C++ 尾随 递归 整数      更新时间:2023-10-16

我被困在如何省略尾随零,在递归调用中反转整数。如果你能引导我走上正确的道路,我将不胜感激。我被困住了,不知道该怎么做。我已经走到了这一步,但正在努力完成它。谢谢。

int main() {
    int numToReverse;
    cout << "Please enter in a number: " << endl;
    cin >> numToReverse;
    cout << reverseIntRecursion(numToReverse) << endl;
}

int reverseIntRecursion(int n) {
    if (n < 10)  //Base Case
        return n;
    else
        cout << n % 10; // Prints out the last number
        return reverseIntRecursion(n / 10); // General Case, Recursive Function
}

也许最简单的方法是将 int 解析为字符串(字符数组)并打印为数组?

下面是一些代码,只要为第二个参数输入 true,就可以正常工作:

int ReverseIntRecursion(int, bool);
int main(int argc, const char * argv[]) {
    std::cout << ReverseIntRecursion(30400, true);
    std::cout << std::endl;

    return 0;
}
int ReverseIntRecursion(int N, bool FirstIter)
{
    if (N < 10)
        return N;
    else if (N % 10 == 0 && FirstIter)
        return ReverseIntRecursion(N/10, true);
    else
        std::cout << (N % 10);
    return ReverseIntRecursion(N/10, false);
}
// prints 403

你的函数没有反转整数。它只是以相反的顺序打印数字。

这就是为什么你会遇到尾随零问题。如果你写了一个实际上反转整数的函数 - 你的问题就会消失。

例如:

// Helper function for reversing an integer.
int reverseIntRecursionBase(int n, int& base) {
    if (n < 10) // trivial case. If n consists of a single digit - reversed n is equal to n.
        {
        return n;
        }
    int result = reverseIntRecursionBase (n/10, base); // recurse until you hit a trivial case.
    /*
       The leftmost digits in the original number should be the
       rightmost digits in the reversed number.
       This code will be first executed, after trivial case has been hit:
       e.g. given number 1234, this line will be first reached when n = 12; result = 1.
    */
    base *= 10;
    result = (n % 10)*base + result;
    return result;
}
int reverseIntRecursion(int n) {
    int base = 1;
    return reverseIntRecursionBase (n, base);
}

现场演示。