题解 P1553 【数字反转(升级版)】

Tomone

2018-04-20 17:12:47

Solution

我感觉我是这题题解最长的代码 ```cpp #include<cstdio> #include<algorithm> #include<iostream> #include<string> #include<sstream> #include<climits> #define MAXN 10001 using namespace std; int vis(string); //判断类型 string xs(string); //小数 string bf(string); //百分数 string fs(string); //分数 string zs(string); //整数 int main(){ string s; cin>>s; if(vis(s)==1){ cout<<zs(s)<<endl; return 0; } if(vis(s)==2){ cout<<xs(s)<<endl; return 0; } if(vis(s)==4){ cout<<bf(s)<<endl; return 0; } if(vis(s)==3){ cout<<fs(s)<<endl; return 0; } } int vis(string x){ //判断是什么类型 for(int i=0;i<x.size();++i){ if(x[i]<='9'&&x[i]>='0') continue; if(x[i]=='.') return 2; //读到.返回2 if(x[i]=='/') return 3;//读到/返回3 if(x[i]=='%') return 4;//读到%返回4 } return 1; //都没有就是整数 } string xs(string x){ string x1,x2,ans; int tmp=MAXN; //赋值一个很大得数判断是不是只有零 x1=x.substr(0,x.find('.')); //截取0到.的字符串 x2=x.substr(x.find('.')+1,x.size()); reverse(x1.begin(),x1.end()); //STL反转函数 reverse(x2.begin(),x2.end()); for(int i=0;i<x1.size();++i){ if(x1[i]=='0') continue; //去前导零 else{ tmp=i; break; } } if(tmp==MAXN) x1="0",tmp=0; x1=x1.substr(tmp,x1.size()); //截取 tmp=MAXN; for(int i=x2.size()-1;i>=0;--i){ //去前导零 if(x2[i]=='0') continue; else{ tmp=i; break; } } if(tmp==MAXN) x2="0"; x2=x2.substr(0,tmp+1);//截取 ans=x1+'.'+x2; return ans; } string bf(string x){ string x1,ans; int tmp; x1=x.substr(0,x.find('%')); reverse(x1.begin(),x1.end()); for(int i=0;i<x1.size();++i){//去前导零 if(x1[i]=='0') continue; else{ tmp=i; break; } } x1=x1.substr(tmp,x1.size());//截取 ans=x1+'%'; return ans; } string fs(string x){ string x1,x2,ans; int tmp=MAXN; x1=x.substr(0,x.find('/')); x2=x.substr(x.find('/')+1,x.size()); reverse(x1.begin(),x1.end()); reverse(x2.begin(),x2.end()); for(int i=0;i<x1.size();++i){ //去前导零 if(x1[i]=='0') continue; else{ tmp=i; break; } } if(tmp==MAXN) x1="0",tmp=0; x1=x1.substr(tmp,x1.size()); for(int i=x1.size()-1;i>=0;--i){ //去后面的零 if(x1[i]=='0') continue; else{ tmp=i; break; } } x1=x1.substr(0,tmp+1); for(int i=x2.size()-1;i>=0;--i){//去前导零 if(x2[i]=='0') continue; else{ tmp=i; break; } } x2=x2.substr(0,tmp+1); for(int i=0;i<x2.size();++i){//去后面的零 if(x2[i]=='0') continue; else{ tmp=i; break; } } x2=x2.substr(tmp,x2.size()); ans=x1+'/'+x2; return ans; } string zs(string x){ int tmp=MAXN; reverse(x.begin(),x.end()); for(int i=0;i<x.size();++i){ //去前导零 if(x[i]=='0') continue; else{ tmp=i; break; } } if(tmp==MAXN) x="0",tmp=0; x=x.substr(tmp,x.size()); return x; } ``` 博客:aptx.xin