删数问题
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
键盘输入一个高精度的正整数n(≤100位),去掉其中任意s个数字后剩下的数字按照原来的左右次序组成一个新的正整数。编程对给定的n与s,寻找一种方案,使得剩下的数字组成的新数最小。
Input
输入有多组 每组包括原始数n,要去掉的数字数s;
Output
输出去掉s个数后最小的数
Example Input
178543 4
Example Output
13
Hint
Author
参考代码
#include<stdio.h>
#include<string.h>
int main()
{
char num[101]; ///用字符串存储数字
int s; ///删掉的数字个数
int i;
while(~scanf("%s%d",num,&s))
{
while(s--)
{
for( i = 0; i < strlen(num) - 1; i++ )
{
if( num[i] > num[i+1] ) ///此处的>不误写成>=
///当前一个数字大于后一个数字的时,出现一个递减
break;
}
///删除前一个数
while( i < strlen(num) )
{
num[i] = num[i+1];
///从该数开始,后一个数字覆盖前一个
i++;
}
}
///跳过前几位的'0'
i = 0;
while( i < strlen(num) - 1 && num[i] == '0' ) i++;
///从左到右在第一个不为0的数字处结束循环,如果都为0,则保留最后一个0
///输出结果
while( i < strlen(num) )
{
printf("%c",num[i]);
i++;
}
printf("\n");
}
return 0;
}