我有一个问题如何更好地解决这个问题,我有一个版本,但我相信有更好更短的方法可以做到这一点。我需要获取任何int数字(将其作为int返回而不将其转换为String),但从不在结尾处使用0(100,120)但是像1234或4132.我需要使用此数字并使用递归在示例1234到4321,4132到2314的另一个方面重写它,也许有一种方式被称为,我个人不知道它。
这是我得到的:
difference: 25
no_difference: 6
答案 0 :(得分:0)
使用int的String表示可能会使代码更具可读性。
尝试:
Integer.parseInt(new StringBuilder(r+"").reverse().toString());
答案 1 :(得分:0)
没有注意到递归部分。
public static void main(String[] args) {
int i = 589;
System.out.println(reverse(i));
}
public static int reverse(int k){
if(k/10 == 0){return k;}
else return (k%10 * (int)Math.pow(10, (int)Math.log10(k))) + reverse(k /10);
}
说明:
答案 2 :(得分:0)
当前代码无法编译。在此行中添加了)
:
从if(r==0{
更改为if(r==0){
并在此行;
return + (r%10) * (int)Math.pow(10, (n-k-1))+reverse (r/10, n, k+1);
这两次更改后的代码如下所示:
public static int reverse(int r, int n, int k){
if(r==0)
{
return 0;
}else{
return + (r%10) * (int)Math.pow(10, (n-k-1))+reverse (r/10, n, k+1);
}
}
如果号码以0
结尾,则该程序不会向用户显示任何特殊消息,即1230
将返回321
。在这种情况下,也许吧
也许打印一条消息(“号码不能以0结尾)或抛出异常?”
答案 3 :(得分:0)
将int转换为string,将其反转并将其转换回int
答案 4 :(得分:0)
public static final int reverse(int number) {
final int lastDigit = number % 10;
final int length = (int) Math.log10(number);
return (number < 10) ? number : (int) (Math.pow(10.0, length) * lastDigit + reverse(number / 10));
}
如果数字低于10则数字本身。否则,它的最后一位数乘以10 ^ n,其中n是数字的长度,所以它现在位于第一位数的位置。
然后将剩余数字的反转结果添加到它(没有最后一位数字的数字)。
你可以推进递归函数本身,因为它已经解决了这个大问题。你只需要考虑微不足道的结束条件和一个步骤(这主要是你建议的最后一步)
答案 5 :(得分:0)
这是我使用递归和无转换的最佳方式。
private static int myReverse(int n, int r) {
if(n == 0)
return r;
int newR = r*10 + n%10;
return myReverse(n/10, newR);
}
我在这里做的是:
r = 12
和n = 3
,首先12*10 = 120
,n%10 = 3
然后r*10 + n%10 = 123
只有一个退货声明的“愉快”方式:
private static int myReverse2(int n, int r) {
return n == 0 ? r : myReverse2(n/10, r*10 + n%10);
}