使用递归来反转整数而不使用字符串

我已经尝试了一段时间但是无法让它发挥作用。 我试图有一个方法来反转整数而不使用字符串或数组。 例如,123应以整数forms反转为321。

我的第一次尝试:

/** reverses digits of integer using recursion */ public int RevDigs(int input) { int reverse = 0; if(input == 0) { return reverse; } int tempRev = RevDigs(input/10); if(tempRev >= 10) reverse = input%10 * (int)Math.pow(tempRev/10, 2) + tempRev; if(tempRev 0) reverse = input%10*10 + tempRev; if(tempRev == 0) reverse = input%10; return reverse; }//====================== 

我也尝试使用它,但它似乎弄乱了中间数字:

 /** reverses digits of integer using recursion */ public int RevDigs(int input) { int reverse = 0; if(input == 0) { return reverse; } if(RevDigs(input/10) == 0) reverse = input % 10; else { if(RevDigs(input/10) < 10) reverse = (input % 10) *10 + RevDigs(input/10); else reverse = (input % 10)* 10 * (RevDigs(input/10)/10 + 1) + RevDigs(input/10); } return reverse; } 

我试过看一下网站上的一些例子,但是我无法让它们正常工作。 为了进一步说明,我不能为这个项目使用String或数组,并且必须使用递归。 有人可以帮我解决问题。 谢谢。

关于什么:

 public int RevDigs(int input) { if(input < 10) { return input; } else { return (input % 10) * (int) Math.pow(10, (int) Math.log10(input)) + RevDigs(input/10); /* here we: - take last digit of input - multiply by an adequate power of ten (to set this digit in a "right place" of result) - add input without last digit, reversed */ } } 

当然,这假设input >= 0

如何使用两种方法

 public static long reverse(long n) { return reverse(n, 0); } private static long reverse(long n, long m) { return n == 0 ? m : reverse(n / 10, m * 10 + n % 10); } public static void main(String... ignored) { System.out.println(reverse(123456789)); } 

版画

 987654321 

使用递归的关键是注意到您尝试解决的问题包含相同问题的较小实例。 在这里,如果你试图反转数字13579,你可能会注意到你可以通过反转3579(同样的问题但更小),将结果乘以10,然后加1(你起飞的数字)使问题变小。 )。 或者你可以反转数字1357(递归),给出7531,然后将9 *(一些10的幂)加到结果中。 第一个棘手的问题是你必须知道何时停止(当你有一位数时)。 第二件事是,对于这个问题,你必须弄清楚这个数字的位数,以便你可以获得10的权力。 你可以使用Math.log10 ,或者你可以使用一个以1开头并乘以10的循环,直到它大于你的数字。

 package Test; public class Recursive { int i=1; int multiple=10; int reqnum=0; public int recur(int no){ int reminder, revno; if (no/10==0) {reqnum=no; System.out.println(" reqnum "+reqnum); return reqnum;} reminder=no%10; //multiple =multiple * 10; System.out.println(i+" i multiple "+multiple+" Reminder "+reminder+" no "+no+" reqnum "+reqnum); i++; no=recur(no/10); reqnum=reqnum+(reminder*multiple); multiple =multiple * 10; System.out.println(i+" i multiple "+multiple+" Reminder "+reminder+" no "+no+" reqnum "+reqnum); return reqnum; } public static void main(String[] args) { // TODO Auto-generated method stub int num=123456789; Recursive r= new Recursive(); System.out.println(r.recur(num)); } } 
 import java.io.*; public class ReversalOfNumber { public static int sum =0; public static void main(String args []) throws IOException { System.out.println("Enter a number to get Reverse & Press Enter Button"); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); String input = reader.readLine(); int number = Integer.parseInt(input); int revNumber = reverse(number); System.out.println("Reverse of "+number+" is: "+revNumber); } public static int reverse(int n) { int unit; if (n>0) { unit = n % 10; sum= (sum*10)+unit; n=n/10; reverse(n); } return sum; } }