题目链接:https://www.luogu.org/problem/P1553
思路概括:找到符号的位置标记,先反转前面的部分,再反转后面的部分
真的是改bug改到吐血
给大家列几个把我卡掉的样例(血与眼泪的经历)
0.0000 -> 0.0
1234567890/1234567890 -> 987654321/987654321
0% -> 0%
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<bitset>
#include<cassert>
#include<cctype>
#include<cmath>
#include<cstdlib>
#include<ctime>
#include<deque>
#include<iomanip>
#include<list>
#include<map>
#include<queue>
#include<set>
#include<stack>
#include<vector>
#define lt k<<1
#define rt k<<1|1
#define lowbit(x) x&(-x)
#define lson l,mid,lt
#define rson mid+1,r,rt
using namespace std;
typedef long long ll;
typedef long double ld;
//#define int ll
#define ios ios::sync_with_stdio(false);cin.tie(nullptr);
#define mem(a, b) memset(a, b, sizeof(a))
const double pi = acos(-1.0);
const double eps = 1e-6;
const ll mod = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int maxn = 2e5 + 50;
string str;
int main()
{
cin >> str;
int len = str.size();
int cnt = 0;
int pos = -1;
for(int i=0; i<len; i++)
{
if(str[i] >= '0' && str[i] <= '9')
{
cnt++;
}
else
{
pos = i;
break;
}
}
while(str[cnt-1] == '0')
{
cnt--;
}
while(str[len-1] == '0')
{
len--;
}
// cout << cnt << "!!" << endl;
if(pos == -1)
{
if(!cnt) cout << "0";
for(int i=cnt-1; i>=0; i--)
{
cout << str[i];
}
cout << endl;
}
else
{
if(str[pos] == '%')
{
if(!cnt) cout << "0";
for(int i=cnt-1; i>=0; i--)
{
// if(str[i] == '0') continue;
cout << str[i];
}
cout << "%" << endl;
}
else
{
if(!cnt) cout << "0";
// cout << cnt << ' ' << pos << "!!" << endl;
for(int i=cnt - 1; i>=0; i--)
{
// if(str[i] == '0') continue;
cout << str[i];
}
cout << str[pos];
if(len -1 == pos)
{
cout << "0";
}
else
{
while(str[pos + 1] == '0')
{
pos++;
}
// cout << pos << "!!" << endl;
if(pos == len-1) cout << "0";
for(int i=len - 1; i>pos; i--)
{
cout << str[i];
}
cout << endl;
}
}
}
return 0;
}