提前解释一下:
这里的 before 是在符号之前的数(如果是整数和百分数就没有 after 只有 before )
反之亦然(after)
用的是字符串操作。
#include<bits/stdc++.h>
#define int long long
using namespace std;
string s;
string before,after;
int flag=0,t;
signed main(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>s;
for(int i=0;i<s.size();i++){
if(s[i]=='%'){
flag=3;
break;
}
if(s[i]=='.' || s[i]=='/'){
if(s[i]=='.') flag=1;
else flag=2;
t=i;
break;
}
before+=s[i];
}
if(flag==1 || flag==2){
for(int i=t+1;i<s.size();i++) after+=s[i];
}
if(flag==0 || flag==3){
if(before=="0"){
if(flag==0){
cout<<0;
return 0;
}else{
cout<<0<<"%";
return 0;
}
}
reverse(before.begin(),before.end());
int x=0;
while(before[x]=='0') x++;
for(int i=x;i<before.size();i++) cout<<before[i];
if(flag==3) cout<<"%";
}
else if(flag==1 || flag==2){
reverse(before.begin(),before.end());
int x=0;
while(before[x]=='0') x++;
for(int i=x;i<before.size();i++) cout<<before[i];
if(after=="0") return 0;
if(flag==1){
cout<<".";
x=after.size();
int sum=0;
while(after[--x]=='0') sum++;
reverse(after.begin(),after.end());
cout<<after.substr(0,after.size()-sum-1);
}
else{
cout<<"/";
reverse(after.begin(),after.end());
for(int i=x;i<after.size();i++){
cout<<after[i];
}
}
}
return 0;
}