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

 

posted @ 2019-06-01 15:56  晔子  阅读(452)  评论(0编辑  收藏  举报