键盘输入一个高精度的正整数 n,去掉其中任意 s 个数字后剩下的数字按原左右次序将组成一个新的正整数。
编程对给定的 n 和 s,寻找一种方案使得剩下的数字组成的新数最小。
#include <stdio.h>
int main() {
int n,q,s;
char a[100];
int i=0;
char j;
while(j!='\n') {
j=getchar();
a[i++]=j;
}//总共有i-1个数字,最后一位为a[i-2],因为while每次都要将最后一行代码执行完才判断循环条件
int hh=--i;
scanf("%d",&s);//输入删去的字数个数
for(q=0; q<s; q++) {
for(n=0; n<i-1; n++) {//要考虑n+1的范围问题,编号上n+1<=i-1
int d=0;
if(a[n]=='\0') continue;
if(a[n+1]=='\0') {
while(a[n+1]!='\0') {
n=n+1;
d=d+1;
}
}
if(a[n-d]>a[n+1]) {//如果整个数列从左到右为从小到大,就删最后一个
a[n-d]='\0';
break;
} else a[i--]='\0';
}
}
for(q=0; q<hh; q++) { //找出左边第一个非0数字
if(a[q]=='\0') continue;
if(a[q]=='0') continue;
else {
//n=q;
break;
}
}
for(; q<hh-1; q++) { //总共有hh个数字,最后一位为a[hh-1]
if(a[q]=='\0') continue;
printf("%c",a[q]);
}
return 0;
}