题目描述
键盘输入一个高精度的正整数 N N N(不超过 250250250 250250250 250250250 位),去掉其中任意 k k k 个数字后剩下的数字按原左右次序将组成一个新的非负整数。编程对给定的 N N N 和 k k k,寻找一种方案使得剩下的数字组成的新数最小。
输入格式
n n n(高精度的正整数 )。
k k k(需要删除的数字个数 )。
输出格式
最后剩下的最小数。
输入输出样例
输入 #1
175438
4
输出 #1
13
代码实现
import java.util.Scanner;
public class P1106 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.next(); //高精度的一个数
int k = sc.nextInt(); //要去掉k位数字
int[] ary = new int[s.length()]; //转化为数组
for(int i=0;i<s.length();i++){
ary[i] = s.charAt(i)-'0';
}
int len = s.length();
for(int i=0;i<k;i++){ //去掉k个数,所以遍历k次
for(int j=0;j<len-1;j++){ //每次遍历一次数组
if(ary[j]>ary[j+1]){ //如果使前一个数大于后一个数,就将前一个数去掉,否则去除最后一个
for(int p=j;p<len-1;p++){
ary[p] = ary[p+1];
}
break;
}
}
len--;
}
int index = s.length();
int flag = 0;
for(int i=0;i<len;i++){
if(ary[i]!=0 || index-k==1){ //去除前面的0 || 只剩一位数的时候输出一位数
flag = 1;
}
if(flag==1){
System.out.print(ary[i]);
}
}
}
}