Recursion - digits in reverse order

前端 未结 15 1059
一向
一向 2021-01-15 10:32

I need to implement a recursive method printDigits that takes an integer num as a parameter and prints its digits in reverse order, one digit per line.

This is what

相关标签:
15条回答
  • 2021-01-15 10:55

    I came looking for a more elegant version than mine, but perhaps this just requires a bit of a messy algorithm. Mine also returns the actual integer value which I agree is much more useful than only printing the string: Mine:

    public static int reverse(int n){
            if(n<10)return n;
            return  n%10*(int)Math.pow(10,(int)Math.log10((double)n)) + reverse(n/10);
        } 
    

    so this returns the last digit, multiplied by 10^current power + (recursive call)

    0 讨论(0)
  • 2021-01-15 10:56

    Here you go :

    static String reverseDigits(int n)
    {
        String N = "";
       if ( n== 0)
           return N;
       else
       {
           N += n%10;
           return N + reverseDigits(n/= 10);
       }            
    }
    

    This is of course returned as String.

    If you want it as int all you have to do is parse it using Integer.parseInt()

    0 讨论(0)
  • 2021-01-15 10:58

    This doesn't exactly answer the question, but it actually computes the entire reversed number instead of printing the digits as they are calculated. The result is an int with the digits in reversed order. Much more powerful than printing out the string version of the numbers one by one:

    public class Reverse {
        public static void main(String[] args) {
            // input int parameter
            int param = Integer.parseInt(args[0]);
            System.out.println(reverse(param)); 
        }
    
        public static int reverse(int input) {
            return reverse(input, 0); 
        }
    
        private static int reverse(int original, int reversed) {
            // get the rightmost original digit and remove it
            int rightmost = original % 10;
            original -= rightmost;
            original /= 10;
    
            // add rightmost original digit to left of reversed
            reversed += rightmost * Math.pow(10, numDigits(original));
    
            return (original == 0)
                ? reversed
                : reverse(original, reversed);
        }
    
        public static int numDigits(int number) {
            number = Math.abs(number);
    
            if (number >= 10) {
                return 1 + numDigits(number /= 10);
            } else if (number > 0) {
                return 1;
            } else {
                return 0;
            }
        }
    }
    
    0 讨论(0)
提交回复
热议问题