键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。
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;
}