c++问题啊好难好难

最大数(附)
描述
查看信息
给定一个不超过200位的正整数,可将其各位数字重新排列。

试找出一个重新排列后的新数,是比原数小的所有新数当中的最大值(即:重新排列成的比原数小的最大数)。

如果不存在这样的数,输出“No”(不含引号)。

说明:本题不必考虑结果中包含前置0的问题。

输入格式
一行一个整数,不超过200位。

输出格式
一行,重新排列后比原数小的最大数(本题不必考虑前置0的问题)。

样例输入
652362245679
样例输出
652359766422
想看代码

思路:
从最后一个数字开始,向前找,找到第一个不是降序的数字,将该数字替换为已遍历数字当中比它小的最大数字,然后将包含这个降序数字的已遍历数字进行降序排列
比如:
25379
从9向前找,7是降序,3是降序,5是升序,好了,已遍历数字中,比5小的最大数是3,然后将9,7,5进行降序排列,从而组合出有效数字为:
23975