整数去位

题目描述

键盘输入一个高精度的正整数N,去掉其中任意M个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和M寻找一种方案使得剩下的数字组成的新数最小。输出组成的新的正整数。

输入数据均不需判错。如果去掉了某几个位后得到的新整数开头为0,保留0。

输入

第一行为高精度正整数N(N的长度不超过106位)
第二行为M(0≤M≤N的长度)

输出

去掉M位后的最小新数。

样例输入 Copy

【样例1】
505
1
【样例2】
82386782
3

样例输出 Copy

【样例1】
05
【样例2】
23672

解析:
就是如果这一位大于他的后一位,把他去掉一定值增大
注意要用一个栈循环去掉值
#include<iostream>
#include<algorithm>
#include<cstring>
#include<stack>
using namespace std;
const int maxn=1e6+100;
string a;
int v[maxn];
int vis[maxn]; 
int n;
stack<char>q;
char p[maxn];
int main(){
    cin>>a>>n;
    int ma=0;
    q.push(a[0]);
    for(int i=1;i<a.size();i++){ 
        while(!q.empty()&&a[i]<q.top()&&n>0){
            q.pop();    
            n--;
        }
        q.push(a[i]); 
    }
    int cnt=0;
    while(!q.empty()){
        p[++cnt]=q.top();
        q.pop();
    }
    for(int i=cnt;i>=1;i--){
        cout<<p[i];
    }
    
}
 
原文地址:https://www.cnblogs.com/lipu123/p/13971725.html