题目描述
当且仅当每个相邻位数上的数字 x 和 y 满足 x <= y 时,我们称这个整数是单调递增的。
给定一个整数 n ,返回 小于或等于 n 的最大数字,且数字呈 单调递增 。
输入样例#1
332
输出样例#1
299
输入样例#2
1234
输出样例#2
1234
思路:找到不符合单调递增的地方改掉,再把后面都变成‘9’好了,用字符串来做。
#include<bits/stdc++.h>
using namespace std;
string DX(string a){
string b="";
for(int i=a.size()-1;i>=0;i--) b+=a[i];
return b;
}
string inttostring(int a){
string s="";
while(a%10!=a){
s+=a%10+'0';
a/=10;
}
s+=a%10+'0';
return DX(s);
}
string sol(int n){
string tmp=inttostring(n);
int len=tmp.size();
for(int i=len-1;i>0;i--){
if(tmp[i]<tmp[i-1]){
tmp[i-1]--;
for(int j=i;j<len;j++) tmp[j]='9';
}
}
return tmp;
}
int n;
int main(){
cin>>n;
string s=sol(n);
for(int i=0;s[i]=='0';i++) s.erase(0,1);
cout<<s;
}