输入描述:
输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt < length(number)。
输出描述:
输出保留下来的结果。
示例1
输入
325 1
输出
35
分析:每次将数字的第一个字符和第二个字符比较,如果第一个字符小于第二个字符,则删除第一个字符,否则继续向下比较,直到删除指定个字符为止;
考虑特殊情况,即字符从第一个开始保持递减顺序或者字符一直相同,则按照刚刚的方法遍历之后,不会删除任何字符,达不到目的,所以要考虑这种特殊情况。
代码如下:
#include<cstdio>
#include<iostream>
#include<string>
using namespace std;
void Delet(string &str) //定义删除字符的函数
{
int len = str.length(); //从第一个祝福开始 遍历到倒数第二个字符为止
for (int i = 0; i < len - 1; i++)
{
if (str[i] < str[i + 1]) //如果前一个字符小于后一个字符
{
str.erase(str.begin() + i); //则将前一个字符删除 跳出循环
break;
}
}
}
int main()
{
string str; //定义输入的数字为字符串
int num; //输入要删除的个数
while (cin >> str)
{
cin >> num;
for (int i = 0; i < num; i++)
{
int len1 = str.length(); //进行删除操作之前,记录当前字符串的长度
Delet(str); //调用删除字符的函数
int len2 = str.length(); //将删除后的字符串长度和删除前的字符串进行比较
if (len2 == len1) //如果相等,则为特殊情况
{
str.erase(str.begin() + len2 - 1); //此时,只需要将末尾的字符删除即可
}
}
cout << str << endl; //输出
}
}