题目描述
键盘输入一个高精度的正整数 N(不超过 250 位),去掉其中任意 k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N 和 k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
输入两行正整数。
第一行输入一个高精度的正整数 n。
第二行输入一个正整数 k,表示需要删除的数字个数。
输出格式
输出一个整数,最后剩下的最小数。
输入输出样例
输入 #1
175438 4
输出 #1
13
#include <iostream>
#include <string>
using namespace std;
int main() {
string n; // 用于存储输入的高精度正整数
int k; // 需要删除的数字个数
cin >> n >> k; // 从标准输入读取高精度正整数和需要删除的数字个数
for (int i = 0; i < k; i++) { // 循环k次,每次删除一个数字
int j = 0;
// 找到第一个不满足递增顺序的位置j
while (j < n.size() - 1 && n[j] <= n[j + 1]) {
j++;
}
n.erase(j, 1); // 删除位置j上的数字
}
// 移除数字前缀的0
while(n[0]=='0')
{
n.erase(0,1);
}
if(n!="") { // 如果剩下的数字非空,则输出剩下的数字
cout << n;
} else { // 如果剩下的数字为空,则输出0
cout << "0";
}
return 0;
}