递归函数将一个正整数的各位由高到低依次输出

递归函数将一个正整数的各位由高到低依次输出

编写思想

朋友向我请教了个题。如题目,花了一点时间把他编写成功了。下面我来说说我是怎么实现的。
思想:从高到低依次输出,也就是说若输入的数字是361,那么输出的数字为631。平常排列数的时候一般用冒泡法啊什么的,但是都必须知道数的大小;而这里只有一个整数,那么我们可以把他先拆分为单一的数字,直到拆分到最后2个数字时候,就开始排序如输入数字为:3654。先从个位一个一个拆分,按顺序拆分出来的结果就是4、5、6、3。最后一次拆出来的数字分别是6和3,先排序。排序出来结果时候63。接着返回上一层,怎么样把5加入到63呢。分3种情况;第一种就是比6大,应该放在最前面;第二种就是比3小,放在最后面;最后一种情况就是放在中间。那么问题来了。怎么知道这个数字是放在那里的;我们在把63拆分,从最小的拆分起。依次比较。最后根据情况来把5放进去。
接下来是代码展示。代码已经经过测试。

测试程序

代码写的不是很规范…

int rank_num(int num)
{
	int a=num/10;
	int b=num%10;
	int c;
	int d=1;
	if(a>10)
	{
		c=a=rank_num(a);
		for(;;)
		{
			if(b>(a%10)&&a!=0)
			{
				a=a/10;
			}
			else
			{
				if(a==0)
				{
					return (b*d)+c;
				}
				else if(a==c)
				{
					return (c*d*10)+b;
				}
				else
				{
					return (a*d*10)+(b*d)+(c%d);
				}
				
			}
			d=d*10;
		}
	}
	else
	{
		return a>b?(num):(b*10)+a;
	}
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值