删数问题
题目描述
键盘输入一个高精度的正整数 N N N(不超过 250 250 250 位),去掉其中任意 k k k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N N N 和 k k k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
输入两行正整数。
第一行输入一个高精度的正整数 n n n。
第二行输入一个正整数 k k k,表示需要删除的数字个数。
输出格式
输出一个整数,最后剩下的最小数。
样例 #1
样例输入 #1
175438
4
样例输出 #1
13
#include<iostream>
#include<algorithm>
#include<string>
#include<math.h>
#include<cstdio>
#include<iomanip>
using namespace std;
typedef long long ll;
int main()
{string s;cin>>s;int n;cin>>n;int len=s.length();while(n--){for(int i=0;i<len;i++){//这里的边界是小于len,原因是最后一个数也可能被删除if(s[i]>s[i+1])//例子1238删除的是8得到最小值123 {for(int j=i;j<len;j++){s[j]=s[j+1];//数组后面的往前移}len--; //长度减一break;//删除完毕,退出for循环,又从头开始遍历}}}int i=0;while(i<len&&s[i]=='0')//去除前导零的操作i++;//定位到第一个不是零的数if(i==len)//如果到len了还是0,那么输出零cout<<0;else{for(int j=i;j<len;j++)//否则从i输出cout<<s[j];}return 0;
}