题解 P1553 【数字反转(升级版)】
错了好几次才AC;QAQ
细节太多,要周密考虑!
我的大概思路如下;
分成两块,先输出前一个数,判断有无符号,无return0,有再输出第二个数;
代码较简单,30行,供参考:
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
char p=0;//放符号
int cnt=0;
cin>>s;
for(int i=0;i<s.size();i++)
{
if(s[i]>='0'&&s[i]<='9') cnt++;//记录第一个数长度
else //遇到符号,记录,跳出
{
p=s[i];
break;
}
}
int x=cnt;//记下第一个数末后一个的位置,也就是符号的位置,如果是分数或小数就要用
cnt--;
while(s[cnt]=='0'&&cnt>0) cnt--;//去除多余前导0;
for(int i=cnt;i>=0;i--)//输出第一个数
cout<<s[i];
if(p==0) return 0;//无符号return 0
else
if(p=='%') {cout<<p;return 0;}
else cout<<p;//其他继续
int m=s.size()-1;
while(s[x+1]=='0'&&x<m-1) x++;//去除末尾0
while(s[m]=='0'&&m>x+1) m--; //去除多余前导0
for(int i=m;i>x;i--)//输出第二个数
cout<<s[i];
return 0;
}
###第一次写题解,求过。