删除部分数字问题

来源:互联网 发布:淘宝美食 知乎 编辑:程序博客网 时间:2024/06/01 12:53

//搜狐2017笔试题
/*
笔试题:给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
*/
/*
解题思路:例如数字51643,需要删除3位数而使剩下的数字组合最大,此时需要从头开始两个数字比较大小,
如果当前数字比其下一位小,则删除当前数字,此时变为5643,继续从头开始遍历,5比6小,则删除5,变为643
继续从头遍历,当走到4的位置发现4比3大,而且4已经是倒数第二位数字,则删除最后一位数字,就得到了64
关键点:1.每次j都需要从头遍历
2.需要考虑最后两个数字比较时,如果倒数第二位比最后一位小,需要删除最后一个数字。
*/

#include<iostream>#include<string.h>using namespace std;int main(){    string number;    int count;    int j;    cout<<"请输入一个十进制的正整数:";    while(cin>>number)    {        cout<<"请输入要去掉的数字个数:";        cin>>count;        for(int i = 0;i<count;i++)        {            int length = number.length();            for(j = 0;j<length-1;j++)            {                if(number[j]<number[j+1])                {                    number.erase(number.begin()+j);                    break;                }            }            if(j == length-1)  //例如51643,当j到数字倒数第二位时,4比3大,此时要删除3,                number.erase(number.end()-1);            j--; //每次都需要j--使j从数字的开始遍历。        }        cout<<number;    }    return 0;}