【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;
}
}
}
如果大家有其他方法实现的,欢迎讨论交流。
以下为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;
}
}
}
如果大家有其他方法实现的,欢迎讨论交流。
相关文章推荐
- java 用递归实现:输入一个整数,用字符串逆序输出,例如输入123,输出321 ,不使用全局变量
- JAVA递归实现字符串逆序输出
- 将整数字符串转换成整数输出(JAVA实现,不能用自带函数)
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- C#递归实现将一整数逆序后放入一数组中
- [Java] 自己实现字符串转换成整数
- java实现递归将数组逆序输出
- 逆序打印整数,要求递归实现
- 简单的C语音字符串和整数以及浮点数互转(递归实现)
- Java递归实现整数倒叙输出
- java用递归实现输入字符串反向输出
- java 面试题:不用库函数实现字符串逆序
- 写一个函数,输入int型,返回整数逆序后的字符串。如:输入123,返回“321”。 要求必须用递归,不能用全局变量,输入必须是一个参数,必须返回字符串
- 用递归实现字符串的逆序输出
- 逆序输出字符串(递归实现)
- 初步实现无循环(则递归)将任意整数转任意进制字符串
- 用递归实现输入一系列整数后逆序输出
- 14、JAVA 判断一个数/字符串是不是回文?实现字符串的逆序,如“abcd”变成“dcba”
- java将字符串逆序递归方式输出
- java 实现将String字符串大写中文数字转换成int类型整数