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

£可爱£侵袭症+ 提交于 2019-12-25 23:38:17

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

编写思想

朋友向我请教了个题。如题目,花了一点时间把他编写成功了。下面我来说说我是怎么实现的。
思想:从高到低依次输出,也就是说若输入的数字是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;
	if(b==0)
		return a;
	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;
	}
}

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!