Hatsunatsu @ 2023-11-04 11:17:43
RT,栈方法。感觉思路没有什么问题,但 WA#7。
评测记录
代码如下:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<vector>
#include<string>
#include<cstring>
#include<cctype>
typedef long long ll;
typedef long double ld;
using namespace std;
const int MAXN=1000000005;
char a[MAXN],b[MAXN];
ll t;
void push(char n){
a[t++]=n;
}
void pop(){
t--;
}
char top(){
return a[t-1];
}
int size(){
return t;
}
bool empty(){
return t==0;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin.getline(b,MAXN);
ll i=0;
ll res=0;
if(b[0]=='0'&&b[1]=='\0'){
cout<<0;
return 0;
}
while(b[i]!='\0'){
push(b[i]);
if(top()=='0'&&i==0){
pop();
}
else if(top()=='0'&&i==1){
pop();
}
if(top()=='-'){
pop();
res=1;
}
i++;
}
while(top()=='0'){
pop();
}
if(res==1){
cout<<"-";
}
while(!empty()){
cout<<top();
pop();
}
return 0;
}
by Sci_8633 @ 2023-12-30 20:31:40
@Hatsunatsu 送你一招:直接用reverse函数翻转字符串,再修改一下细节就好了。 AC代码送给你(借给你)用用。
#include<bits/stdc++.h>
using namespace std;
string n;
bool flag;
int main(){
cin>>n;
int len=n.size();
for(int i=0;i<len;++i){
if(n[i]=='0')
flag=1;
if(flag==1)
printf("%c",'0');
break;
}
if(n[0]!='-'){
reverse(n.begin(),n.end());
int i=0;
while(n[i]=='0'){
i++;
}
n.erase(0,i);
cout<<n;
}
else{
n.erase(0,1);
len--;
reverse(n.begin(),n.end());
cout<<'-';
int i=0;
while(n[i]=='0'){
i++;
}
n.erase(0,i);
cout<<n;
}
return 0;
}
by Hatsunatsu @ 2023-12-30 21:12:38
@Sci_8633 的确是这样的,不过那会我想到啥就写啥了,思路有很多啊。
by Sci_8633 @ 2024-01-05 20:28:30
@Hatsunatsu (❤ ω ❤) 当然啦~