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

时间:2017-01-31 19:36:03

标签: c++ recursion integer

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

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
}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:-1)

只要为第二个参数输入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

答案 2 :(得分:-1)

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

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

例如:

// 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);
}

Live demo