递归 – 相反顺序的数字

我需要实现一个递归方法printDigits,它以整数num作为参数,并以相反的顺序打印其数字,每行一位数。

这是我到目前为止:

public class PrintDigits { public static void main(String[] args) { System.out.println("Reverse of no. is " + reversDigits(91)); } /* Recursive function to reverse digits of num */ public static int reversDigits(int number) { if (number == 0) return number; else { return number % 10; } } } 

我觉得我只缺少一行代码,但不确定我需要做些什么来修复它。

 public static void main(String[] args) { reverseDigits(98198187); } /* Recursive function to reverse digits of num */ public static void reverseDigits(long number) { if (number < 10) { System.out.println(number); return; } else { System.out.println(number % 10); reverseDigits(number/10); } } 

这并不完全回答这个问题,但它实际上计算了整个反转数而不是在计算数字打印数字 。 结果是一个int,其数字顺序相反。 比逐个打印出数字的字符串版本要强大得多:

 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; } } } 
 public static int reversDigits(int num) { if(num < 1) { return 0; } int temp = num % 10; num = (num - temp)/10; System.out.println(temp); return reversDigits(num); } 

这将以相反的顺序一次打印一个数字。 您不需要在main方法中执行System.out

 public static void reversDigits(long number) { System.out.println(number % 10); if (number >= 10) { reversDigits(number / 10); } } 

到目前为止这是最短/最简单的版本;)

我发现我必须摘掉最高位(在左边)并向最右边的数字方向努力。 我无法让一个递归的工作从右到左工作。

 public static int reverseItRecursive(int number) { if (number == 0) return 0; int n = number; int pow = 1; while (n >= 10) { n = n / 10; pow = pow * 10; } return (n + reverseItRecursive(number - n*pow)*10); } 

这应该工作

  int rev = 0; int reverse(int num) { if (num < 10) { rev = rev*10 + num; } else { rev = rev*10 + (num % 10); num = reverse(num / 10); } return rev; } 

此方法反转整数并返回结果,而不使用任何字符串函数,Math或仅打印

 public class ReverseNumber { public static void main (String[] args) { ReverseNumber rNumber = new ReverseNumber(); System.out.println(rNumber.reverseRecursive(1234,0)); // pass zero to initialize the reverse number } public int reverseRecursive(int n, int reverse) {// n - the number to reverse // System.out.println(n); if (n != 0){ reverse = reverse * 10; reverse = reverse + n %10; n = n/10; } else { return reverse; } return reverseRecursive(n,reverse); }} 

我来寻找一个比我更优雅的版本,但也许这只需要一些混乱的算法。 我也会返回实际的整数值,我同意它只比打印字符串更有用:我的:

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

所以这返回最后一位数,乘以10 ^当前功率+(递归调用)

干得好 :

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

这当然是作为String返回的。

如果你想要它作为int,你所要做的就是使用Integer.parseInt()解析它

 //Reverse a number using recursion by bibhu.rank public class Rev_num { public static int revnum(int x){ int temp1=x,temp2=1; if(x<10){ return x; } while(temp1>=10){ temp2*=10; temp1/=10; } if(((x%temp2) < (temp2/10))&& x%temp2!=0){ int c=temp2; while(c> x%temp2){ c/=10; } c=temp2/c; temp2=x%temp2; return((temp1)+(c*revnum(temp2))); } temp2=x%temp2; return (temp1+(10*revnum(temp2))); } public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("Enter a number"); Scanner y=new Scanner(System.in); System.out.println(revnum(y.nextInt())); y.close(); } } 
  public class reverseIntRec{ public static void main(String args[]) { System.out.println(reverse(91)); } public static int reverse(int x) { String strX = String.valueOf(x); if (Math.abs(x) < 10) return x; else return x % 10 * ((int) Math.pow(10, strX.length()-1)) + reverse(x/10); } } 

这是我的答案返回整数。 我将x转换为字符串,以查看您应该乘以多少0s

例如: reverse(91)返回1 * 10 + reverse(9),返回10 + 9 = 19。

 //Try out this, recursion with singe variable using Math class. public static void main(String[] args) { // Let the number be 139 int n=139; System.out.println("reverse is "+rev(n)); } static int rev(int n){ if (n==0)return 0; else { return n%10*(int) Math.pow(10,(double) (int)Math.log10(n))+rev(n/10); } } 
  public void reverse(int num){ System.out.print(num %10); if(num / 10 == 0){ return; } reverse(num /10); return; }