P1553 数字反转(升级版)解法
本题没什么特别难的地方,把所有数字都当成字符处理就行了,注意一下字符串结尾操作即可。至于前导0可以用个while循环去掉,但注意不要把单个0也去掉了。主程序识别符号也没什么难的,注意小数位的尾0可以通过再反转2次当成前导0去掉。
#include<iostream>
#include<cstring>
using namespace std;
void rev(char *s){
char t;
int len = strlen(s);
while(len > 1 && s[len-1] == '0') len--;
s[len] = '\0';
for(int i=0; i<len/2; i++){
t = s[i]; s[i] = s[len-1-i]; s[len-1-i] = t;
}
return;
}
int main(){
char s[25], l[25], r[25];
int sym = 0;
cin>>s;
int len = strlen(s);
for(int i=0; i<len; i++)
if(s[i] > '9' || s[i] < '0')
sym = i;
if(sym == 0){
rev(s);
cout<<s<<endl;
}
else if(sym == len - 1){
s[len-1] = '\0';
rev(s);
cout<<s<<"%"<<endl;
}
else if(s[sym] == '.' || s[sym] == '/'){
for(int i=0; i<sym; i++)
l[i] = s[i];
for(int i=sym+1; i<len; i++)
r[i-1-sym] = s[i];
l[sym] = '\0'; r[len-sym-1] = '\0';
rev(l); rev(r);
if(s[sym] == '.'){
rev(r); rev(r);
cout<<l<<"."<<r<<endl;
}
else cout<<l<<"/"<<r<<endl;
}
return 0;
}