问题描述
- 递归法将一个数字倒置(如:12345→54321)代码不知道哪里出错了
-
public class Recursion {
public static int len(int n){
int j=0;
while(n>0)
{
j++;
n=n/10;
}
return j;
}
public static int f(int n,int k){
int i,t=n%10;
if(n<10)
{
k=n;
return k;
}
else{
for(i=0;i<len(n);i++){
k=k*10+t;
n=n/10;
t=n%10;
}
return k;
}
}
public static void main(String[] args) {
System.out.println(""+len(12345678));
System.out.println(""+f(12345678,0));}
}运行出来结果是
8
8765想知道为什么????
解决方案
你知道什么是递归么?你的程序根本就不是递归。
解决方案二:
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
static int mknum(int n)
{
if (n == 0) return 1;
else return (int)Math.pow((double)10, (double)((int)Math.log10((double)n) - 0));
}
static int f(int n, int seed)
{
if (n == 0) return seed / 10;
return f(n % mknum(n), n / mknum(n) * mknum(seed) * 10 + seed);
}
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
System.out.println(f(12345678, 0));
}
}
解决方案三:
http://ideone.com/4nzQwc
在线运行
87654321
解决方案四:
楼主,自己调用自己叫递归。。
package cn.baokx;
public class Test {
public static void main(String[] args) {
System.out.println(fun(12345678));
}
public static String fun(int num){
if(num>=10){
return (num%10)+fun(num/10);
}else{
return String.valueOf(num);
}
}
}
解决方案五:
public static void main(String[] args) {
System.out.println(digui(12345678));
}
public static String digui(Integer t) {
if (t < 10) {
return t.toString();
} else {
Integer k = t % 10;//得到最后一个数
t = t / 10;
return k + digui(t);//每得到最后一个数,放在最前面,在调用方法
}
}
解决方案六:
for(i=0;i<len(n);i++){
k=k*10+t;
n=n/10;
t=n%10;
}
循环里改变了n的值,所以循环条件len(n);也就变了,可以先把长度取出来。
int nLen = len(n);
for(i=0;i<nLen;i++){
k=k*10+t;
n=n/10;
t=n%10;
}
解决方案七:
这个题中的递归应该是
输出最后一个字符
生成一个去掉末尾字符的字符串,调用这个函数
时间: 2024-10-03 17:46:48