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<<"%"; }}