新手天翼
题目描述 Description
给出一个高精度整数n(位数不超过1000位),请你对n进行m次删除操作(m远小于原来整数的位数):每次删除n中的一位,使得剩下来的数字最小(剩下来的数字前后次序不变,如果出现高位0直接舍弃)。
输出每次删除操作得到的数字。
输入描述 Input Description
输入一个正整数n(长度不超过1000位)和一个整数m(m远小于n的长度)。
输出描述 Output Description
输出m行:每一次删除操作得到的数字(高位0直接舍弃)。
样例输入 Sample Input
10213 3
样例输出 Sample Output
213 13 1
数据范围及提示 Data Size & Hint
样例解释:
第1次删除首位的1,得到0213,高位0直接舍弃,输出213;
第2次删除213中的2,得到13;
第3次删除3,得到1。
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int main(){
string s;
int n;
cin>>s;
cin>>n;
while(n--){
for(int i=0;i<=s.size()-1;i++){
if(s[i]<s[i-1]||i==s.size()-1)
s.erase(i,1);
n--;
break;
}
}
for(int i=0;i<=s.size()-1;i++){
cout<<s[i];
}
}
考试题(补考)
高子健在2020-11-12 19:48:50追加了内容
m
高级光能
Emmm
题目要求
要有过程
你这没过程啊
肯定错(
不如直接在while循环内输出s字符串
首先,你没有判断首位是否为0,在for循环后加上"while(s[0] != '0') s.erase(0, 1);"
还有
在for循环内
似乎需要两个判断
第一个是判断第一个字符是否小于第二个的字符
(你跟我的写法似乎 不一样 我的是从0到s.size()-2)
判断s[i]是否大于s[i+1]{
删除s[i]
break;
}
判断i是否为s.size()-2{
删除s[i+1]
}
还有你的n--似乎出了点问题
把while(n--)中的条件表达式改成"n"
然后在while循环末加上n--