题解 P1553 【数字反转(升级版)】
Tomone
2018-04-20 17:12:47
我感觉我是这题题解最长的代码
```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