```
#include <string>
#include <iostream>
#include <algorithm>
// 自己写的反转函数,返回反转并去掉前导零之后的字符串
std::string reverse(std::string s) {
int zeroCount = 0;
std::reverse(s.begin(), s.end()); // 反转
// 范围 for 循环,用于统计前导零个数
for (auto i : s)
if (i == 48) ++zeroCount;
else break;
s.erase(s.begin(), s.begin() + zeroCount);
return (s != "" ? s : "0"); // 特判
}
// 用于去掉后导零
std::string deleteTail(std::string s) {
int zeroCount = 0;
for (int i = s.size() - 1; i >= 0; --i)
if (s[i] == 48) ++zeroCount;
else break;
s.erase(s.end() - zeroCount, s.end());
return (s != "" ? s : "0");
}
int main() {
std::string s;
std::cin >> s;
if (s.back() == '%') {
std::cout << reverse(s.substr(0, s.size() - 1)) << "%" << std::endl;
return 0;
}
for (auto i : s) {
std::string left, right;
// 其实还有一种不需要遍历字符串的做法,直接 find() 即可,但是当时没想到
if (i == '/') {
left = s.substr(0, s.find("/"));
right = s.substr(s.find("/") + 1);
std::cout << reverse(left) << "/" << reverse(right) << std::endl;
return 0;
}
if (i == '.') {
left = s.substr(0, s.find("."));
right = s.substr(s.find(".") + 1);
std::cout << reverse(left) << "." << deleteTail(reverse(right)) << std::endl;
return 0;
}
}
// 最后剩下的一种情况是正整数
std::cout << reverse(s) << std::endl;
return 0;
}
```
by RenSiYu6 @ 2022-10-03 19:58:16
@[18681800383cc](/user/767496)
谢了,已经AC了
```
#include<bits/stdc++.h>
using namespace std;
int z,x,f,b;
int main(){
string s;
cin>>s;
int zs=0;
for(int i=0;i<s.size();i++){
if(s[i]=='.') x=1;
if(s[i]=='/') f=1;
if(s[i]=='%') b=1;
if(s[i]!='0') zs=1;
}
if(!x&&!f&&!b) z=1;
if(z){
if(!zs){
cout<<0;
return 0;
}
int flag=0;
for(int i=s.size()-1;i>=0;i--){
if(s[i]=='0'&&flag==0){
continue;
}
if(s[s.size()-1]!='0') flag=1;
if(s[i+1]=='0') flag=1;
cout<<s[i];
}
return 0;
}
if(!z){
int m=0;
int t=0,xx=1,ll;
for(int i=0;i<s.size();i++){
if(s[i]<'0'||s[i]>'9'){
m=i;
t=1;
ll=m+1;
continue;
}
if(t&&xx){
if(s[m+1]=='0'){
if(s[i]!='0'){
xx=0;
ll=i;
}
}
}
}
int pd=1;
for(int i=0;i<m;i++){
if(s[i]!='0') pd=0;
}
if(!pd){
int flag=0;
for(int i=m-1;i>=0;i--){
if(s[i]=='0'&&flag==0){
continue;
}
if(s[m-1]!='0') flag=1;
if(s[i+1]=='0') flag=1;
cout<<s[i];
}
}
if(pd) cout<<0;
int flag=0;
if(x) cout<<'.';
if(f) cout<<'/';
if(b) cout<<'%';
pd=1;
for(int i=m+1;i<s.size();i++){
if(s[i]!='0') pd=0;
}
if(!pd){
for(int i=s.size()-1;i>=ll;i--){
if(s[i]=='0'&&flag==0){
continue;
}
if(s[s.size()-1]!='0') flag=1;
if(s[i+1]=='0') flag=1;
cout<<s[i];
}
}
if(pd&&!b) cout<<0;
}
}
```
by Tr_Sup @ 2022-10-03 20:26:46