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

本文介绍了使用递归算法实现整数逆序的方法,并提供了一种利用字符串切割进行逆序的替代方案。通过两种不同方式的对比,展示了递归算法在解决此类问题中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


今天看到一道算法题。说让整数逆序,用递归算法实现,书上的源码是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;
		}		
	}
	
}

如果大家有其他方法实现的,欢迎讨论交流。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值