rt,希望大佬们能指正一下错误,或者告诉一下第8个测试点的数据。。。万分感谢
#include<bits/stdc++.h>
using namespace std;
bool isZero=true;//记录前导零
int endZ=0;//记录后导零
int zr=0;//小数点前为0
int main(){
string s;
cin>>s;
int rec=0,place=0;
for(int i=0;i<s.size();i++){
if(s[i]=='.'){
rec=1;
place=i;
}
if(s[i]=='/'){
rec=2;
place=i;
}
if(s[i]=='%'){
rec=3;
}
}
if(rec==0){//整数
if(s[0]=='0'){
cout<<0;
return 0;
}
reverse(s.begin(),s.end());
for(int i=0;i<s.size();i++){
if(s[i]=='0'&&isZero==true)continue;
else{
isZero=false;
cout<<s[i];
}
}
}
else if(rec==1){//小数
if(s[0]=='0'&&place==1){//特判0.x
zr=1;
}
reverse(s.begin(),s.begin()+place);
reverse(s.begin()+place+1,s.end());
for(int i=0;i<place;i++){
if(zr==1){
cout<<0;
break;
}
else if(s[i]=='0'&&isZero==true)continue;
else{
isZero=false;
cout<<s[i];
}
}
cout<<'.';
if(s.size()-place==2&&s[s.size()-1]=='0'){
cout<<0;
return 0;
}
for(int i=s.size()-1;i>place;i--){
if(s[i]=='0')endZ++;
}
for(int i=place+1;i<s.size()-endZ;i++){
cout<<s[i];
}
}
else if(rec==2){//分数
if(s[0]=='0'&&place==1){//特判0/x
zr=1;
}
reverse(s.begin(),s.begin()+place);
reverse(s.begin()+place+1,s.end());
for(int i=0;i<place;i++){
if(zr==1){
cout<<0;
break;
}
else if(s[i]=='0'&&isZero==true)continue;
else{
isZero=false;
cout<<s[i];
}
}
isZero=true;
cout<<'/';
for(int i=place+1;i<s.size();i++){
if(s[i]=='0'&&isZero==true)continue;
else{
isZero=false;
cout<<s[i];
}
}
}
else{//百分数
if(s=="0%"){
cout<<s;
return 0;
}
reverse(s.begin(),s.end()-1);
for(int i=0;i<s.size()-1;i++){
if(s[i]=='0'&&isZero==true)continue;
else{
isZero=false;
cout<<s[i];
}
}
cout<<'%';
}
return 0;
}