链接:https://www.nowcoder.com/questionTerminal/4fc97c45a69241e992b3e705e817909c?answerType=1&f=discussion
来源:牛客网

定义\mathit S(n)S(n),表示\mathit nn在十进制下的各位数字和。
现在给定一个\mathit xx,请你求出最小正整数\mathit nn,满足x \leq S(n)x≤S(n).

输入描述:
第一行数据组数\mathit TT,对于每组数据,一行一个数字\mathit xx。
1 \leq x \leq 10^5 , 1 \leq T \leq 101≤x≤10
5
,1≤T≤10

输出描述:
对于每组数据,一行一个整数表示最小的\mathit nn。
示例1
输入
2
7
9
输出
7
9
示例2
输入
2
13
18
输出
49
99

栈解法:x从9至1逆向求解,具体做法从代码不难看出;要得最小数,巧用栈先进后出原理即可
#include<bits/stdc++.h>
using namespace std;

stack<int> S(int x){
int n = x,k = 9;
stack<int>st;
while(n > 0){
n -= k;
if(n > 0){
st.push(k);
}
else if(n == 0){st.push(k);return st;}
else{
n += k;
--k;
}
if(k <= 0)return st;
}
}
int main()
{
int t;
scanf("%d",&t);
while(t--){
int x;
scanf("%d",&x);
stack<int>st = S(x);
while(!st.empty()){
printf("%d",st.top());
st.pop();
}
printf("\n");
}
}</int></int></int>