Problem Description
键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。
Input
输入有多组 每组包括原始数n,要去掉的数字数s;
Output
输出去掉s个数后最小的数
Example Input
178543 4
Example Output
13 #include<stdio.h> #include<string.h> int main() { int i,j,s,flag,num; char digit[111]; while(~scanf("%s",digit)) { num=0; scanf("%d",&s); if(s>=strlen(digit)) printf("0\n"); else { for(i=0;i<s;i++) { for(j=0;j<strlen(digit);j++) { if(digit[j]<=digit[j+1]) continue; else { flag=j;break; } } for(j=flag;j<strlen(digit);j++) digit[j]=digit[j+1]; } for(i=0;i<strlen(digit);i++) { if(digit[i]=='0') num++; } if(num==strlen(digit)) printf("0\n"); else { for(i=0;i<strlen(digit);i++) { if(digit[i]=='0') continue; else { flag=i;break; } } for(i=flag;i<strlen(digit);i++) { printf("%c",digit[i]); } printf("\n"); } } } return 0; } 或者 #include<stdio.h> #include<string.h> int main() { char a[110]; int s,flag,i,len; while(~scanf("%s %d",a,&s)) { while(s>0) { len=strlen(a); flag=0; while(flag<len&&a[flag]<=a[flag+1]) flag++; while(flag<len) { a[flag]=a[flag+1]; flag++; } s--; } while(a[0]=='0') { len=strlen(a); for(i=0;i<len;i++) a[i]=a[i+1]; } len=strlen(a); if(len==0) printf("0\n"); else printf("%s\n",a); } return 0; }