本关任务:键盘输入一个高精度的正整数 n,去掉其中任意 s 个数字后剩下的数字按原左右次序将组成一个新的正整数。
编程对给定的 n 和 s,寻找一种方案使得剩下的数字组成的新数最小
代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int n,num;
string s;
while(cin >> s){
scanf("%d",&n);
if(n >= s.size()){
printf("0\n");
continue;
}
else{
num = 0;
for(int i = 1;i < s.size();i++){
if(s[i - 1] > s[i]){
num++;
s.erase(i - 1,1);
if(num == n)
break;
//由于删除完之后下标不会往前移动,且循环要加1,所以要想回到原来的位置共需要减2
i = i - 2;
}
}
if(num != n)
for(int i = 0;i < n - num;i++)//删除最后一个,删除n - num次即可
s.erase(s.size() - 1);
for(int i = 0;i < s.size();i++){
if(s[i] != '0'){
for(int j = i;j < s.size();j++)
cout << s[j];
printf("\n");
break;
}
if(i == s.size() - 1){//如果最后全部都是0,那么只要输出0即可
printf("0\n");
break;
}
}
}
}
return 0;
}
运行结果: