编程题
### 问题描述 神行太保戴宗获得了一本武功秘籍,据说练成之后可以日行千里,夜走八百。戴宗正想找个僻静的地方修炼一番,却发现修炼它需要用到一种特殊的数字,叫做“梁山数”。这“梁山数”,和平常的数字不太一样,它的每个数位上的数字都有个上限,超过了就不行。比如,个位数上限是 $5$,十位数上限是 $3$,百位上限是 $1$,那么最大的三位“梁山数”就是 $135$。 想修炼好这门神功,就需要先找到第 $k$ 小的“梁山数”。但是,这可难倒了戴宗,于是,他急忙找到浪子燕青,将事情的来龙去脉告诉了他,并请他帮忙计算出第 $k$ 小的“梁山数”。 燕青看了看,心想这“梁山数”虽然奇怪,但也不过是换了一种计数方式而已,本质上还是数字,于是便答应下来。戴宗给了燕青每个数位上的上限值,用一个整数 $n$ 表示,$n$ 的第 $i$ 位数字 $n_i$ 表示“梁山数”从右往左数第 $i$ 位上的最大值。 现在,请你协助燕青,解决这个问题。 ### 输入格式 输入一行,包含两个整数 $n,k$($1\leq n,k \leq 10^{18}$),分别表示每个数位的最大值、需要找的“梁山数”的序号。 保证数据合法。 ### 输出格式 输出一个整数,表示第 $k$ 小的“梁山数”。 ### 样例输入 ```text 135 8 ``` ### 样例输出 ```text 11 ``` ### 样例说明 当 $n = 135$ 时,所有的‘梁山数’从小到大排列是:$0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 14, 15, 20, 21, ...$,其中第 $8$ 小的是 $11$。
查看答案
赣ICP备20007335号-2