- 主要就是两种处理方法,整数部分和小数部分,分数和百分数都可归结为整数部分
- 整数部分从后往前找找到第一个不为0的地方i,然后将子串 0~i 转置
- 小数部分从前往后找找到第一个不为0的地方j,然后将子串转置
- 具体请看代码和注释
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
#include <algorithm>
#include <cctype>
#define inf 0x3f3f3f3f
#define eps 1e-6
using namespace std;
#define clr(x) memset(x,0,sizeof((x)))
const int maxn = 1e4+1;
#define MAX(a,b,c) ((a)>(b)?((a)>(c)?(a):(c)):((b)>(c)?(b):(c)))
#define _max(a,b) ((a) > (b) ? (a) : (b))
#define _min(a,b) ((a) < (b) ? (a) : (b))
#define _for(a,b,c) for(int a = b;a<c;a++)
string s;
void rev(string str) {
int len = str.length();
if(str=="0"){
cout<<str;return ;}
int i = 0;
for(i = len-1;i>=0;i--) {
if(str[i]!='0')break;
}
for(int j = i;j>=0;j--) {
cout<<str[j];
}
}
int main()
{
#ifdef LOCAL
freopen("data.in","r",stdin);
freopen("data.out","w",stdout);
#endif
cin>>s;
int len = s.length();
int i;
for(i = 0;i<len;i++) {
if(s[i]=='.'||s[i]=='/'||s[i]=='%')break;
}
string tmp;
for(int j = 0;j<i;j++) {
tmp+=s[j];
}
rev(tmp);
if(i<len)
cout<<s[i];
tmp = "";
if(s[i]=='.'&&i+2<len) {
int k;
for(k = i+1;k<len;k++) {
if(s[k]!='0')break;
}
for(int j = k;j<len;j++) {
tmp += s[j];
}
}
else {
for(int k = i+1;k<len;k++) {
tmp += s[k];
}
}
rev(tmp);
return 0;
}