您的位置:首页 > 编程语言 > Java开发

【java】整数逆序,递归实现和字符串切割实现。

2017-08-13 20:59 302 查看
今天看到一道算法题。说让整数逆序,用递归算法实现,书上的源码是C语言实现的,

以下为C语言版:

void convert(int *result, int n) {
if(n>=10)
convert(result+1, n/10);
*result = n%10;
}

int main(int argc, char* argv[]) {
int n = 123456789, result[20] ={};
convert(result, n);
printf("%d: ", n);
for(int i=0; i<9; i++)
printf("%d", result[i]);
}

能够看出来。C语言版相当简洁。于是,我就想着用java语言实现这个逆序,并且是用递归算法。


/**
* 将一整数逆序。递归实现
* @author Ningkui
*
*/
public class ReverseTest {

//幂次方数,用于递归方法中
static int i = 1;

//临时字符串。用于存储递归方法的计算过程中产生的值。
static StringBuffer temporary = new StringBuffer();

//主方法
public static void main(String[] args) {

//原始数据
int number = 123456789;
System.out.println("逆序前:"+number);

/*
* 递归方法
*/
converts(number);

System.out.println("逆序后得到的值:"+temporary);
}

/**
* 递归实现逆序主要方法
* @param number
*/
private static void converts(int number) {

if(Integer.toString(number).length() != i-1){
//计算每一位上的值。通过取余获得,例如1234,获得1000,200,30,4
long flag = Math.round(number%Math.pow(10, i));

//取多位值的首位,如1000取1,500取5,30取3,4取4
flag = (long) (flag/Math.pow(10, i-1));

//将上步骤获得的值添加到临时字符串中
temporary.append(flag);
//更新幂次方数
i++;

//递归,依次对高位进行操作获取。
converts(number);
}
}
}

后来想了一下,其实将值转化为字符串在切割成一个一个数字进行前后对调也是可以的。

/**
* 将一整数逆序。字符串切割实现
* @author Ningkui
*
*/
public class ReverseTest {

//主方法
public static void main(String[] args) {

//原始数据
int number = 123456789;
System.out.println("逆序前:"+number);

/*
* 字符串切割实现
*/
// convertsBySpilt(number);
System.out.println("逆序后得到的值:"+number);
}

/**
* 字符串切割实现逆序
* @param number
*/
private static void convertsBySpilt(int number){

//将测试数据转换为字符串类型。
String str = Integer.toString(number);

//将数据按一位数字拆分,并放入到数组中。
char[] chars = str.toCharArray();

//声明i,j,分别从前和后往中间靠拢,循环交换前后对应的值,
for(int i=0,j=chars.length-1;i<j;i++,j--){
char temp = chars[i];
chars[i]=chars[j];
chars[j] = temp;
}
}

}
如果大家有其他方法实现的,欢迎讨论交流。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: