P1553 数字反转(升级版)
P1553 数字反转(升级版)
温馨提示
1.在处理小数的时候注意处理末尾的0,反转后末尾不得有多余的0
(判断的时候 s[ i ] ! = ' 0 ' 判断的是字符)
2.处理小数和分数的时候,要符号前后分别输出,
flag标记了一次之后,下一次再用就要换一个值了
代码
#include<bits/stdc++.h> using namespace std; char s[100],ss[15]; int kind=1,w1,w2,flag=0,n=0,k; int main() { gets(s); for(int i=0;s[i];i++) { if(s[i]=='.') { kind=2; w1=i-1; w2=i+1; break; } if(s[i]=='/') { kind=3; w1=i-1; w2=i+1; break; } if(s[i]=='%') { kind=4; break; } } switch(kind) { case 1 : for(int i=strlen(s)-1;i>=0;i--) { if(s[i]!='0') { flag=1; cout<<s[i]; } if(flag&&s[i]=='0') cout<<s[i]; if(i==0&&s[i]=='0') cout<<s[i]; } break; case 2: for(int i=w1;i>=0;i--) { if(s[i]!='0') { flag=1; cout<<s[i]; } if(flag&&s[i]=='0') cout<<s[i]; if(i==0&&s[i]=='0') cout<<s[i]; } cout<<"."; n=w2; for(int i=w2;i<=strlen(s)-1;i++) { if(s[i]!='0') { flag=2; continue; } if(flag!=2&&s[i]=='0'&&i!=(strlen(s)-1)) n++; } for(int i=strlen(s)-1;i>=n;i--) cout<<s[i]; break; case 3: for(int i=w1;i>=0;i--) { if(s[i]!='0') { flag=1; cout<<s[i]; } if(flag&&s[i]=='0') cout<<s[i]; if(i==0&&s[i]=='0') cout<<s[i]; } cout<<"/"; for(int i=strlen(s)-1;i>=w2;i--) { if(s[i]!='0') { flag=2; cout<<s[i]; } if(flag==2&&s[i]=='0') cout<<s[i]; if(i==w2&&s[i]=='0') cout<<s[i]; } break; default: for(int i=strlen(s)-2;i>=0;i--) { if(s[i]!='0') { flag=1; cout<<s[i]; } if(flag&&s[i]=='0') cout<<s[i]; if(i==0&&s[i]=='0') cout<<s[i]; } cout<<"%"; } }