题目描述
给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
输入描述:
输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。
输出描述:
输出保留下来的结果。
示例1
输入
复制
325 1
输出
复制
35
需要cnt次从前到后的遍历,如果遇到前一位的数字小于后一位的数字时,就可以将前一位数字删除掉,这里用到了erase函数。
注意如果到最后这个数列已经是从大到小的了,并且去掉的数字个数还不够cnt个时,就要将最后面的几个数字去掉了,去掉的个数是cnt-已经去掉的数字个数。
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdio>
#include<string>
using namespace std;
int main(){
string number,s1,s2;
int cnt;
cin>>number>>cnt;
int size_n=number.size();
while(cnt){
int flag=0; //用于标记整个数列是否已经是从大到小的了
for(int i=1;i<size_n;i++)
if(number[i]>number[i-1]){
number.erase(i-1,1);
cnt--;
flag=1;
break;
}
if(flag) continue;
size_n=number.size();
number.erase(size_n-cnt,cnt);
cnt=0;
}
cout<<number<<endl;
}