数字翻转升级版(整数,小数,分数,百分数)

数字翻转分为很多类,包括整数(这类最好处理)小数,分数,百分数;

对于这些集合在一起,我们就可以将数字转化为字符串处理;

对于整数和百分数,我们翻转时,只需要将后面的0去掉即可;

对于小数和分数,我们就要注意小数点(分式号)前后的0都要去掉;

下面呈上代码(代码有点长,。。。。。。勿喷。。。嘻嘻

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
 string s;
 cin>>s;
 int x=0;
 int slen=s.length();
 for(int i=0;i<slen;i++)
 {
  if(s[i]=='/'||s[i]=='.'||s[i]=='%')
  x=i;
 }
 int u;//统计末尾有几个0;
   if(x==0)//处理整数;
   {
      for(int i=slen-1;i>=0;i--)
   {
    if(s[i]!='0')
    {
     u=i;//记录末尾为0且连续为0到的位置 ,下面有很多这样的代码,功能一样
    break;
    }
    }
  for(int i=u;i>=0;i--)//反向输出数字;
  {
   cout<<s[i];
  }
   }//整数处理完毕
   else if(x!=0)
   {  
       if(s[x]=='.')//翻转小数点前面的数字;
       {
         for(int i=x-1;i>=0;i--)
          {
        if(s[i]!='0') 
        {
         u=i;//记录末尾为0且连续为0到的位置
         break;
     }
        
    }
    for(int i=u;i>=0;i--)
    {
     cout<<s[i];
    }
    cout<<s[x];
     for(int i=x+1;i<slen;i++)//翻转小数点后面的数字
     {
      if(s[i]!='0')
      {
       u=i;
       break;
      }
     }
     for(int i=slen-1;i>=u;i--)
     cout<<s[i];  
    }//小数处理完毕
     if(s[x]=='/')
       {
         for(int i=x-1;i>=0;i--)//翻转分数号的前面的数字
         {
         if(s[i]!='0')
         {
          u=i;
          break;
      }
        
    }
    for(int i=u;i>=0;i--)//输出前面翻转后的数字
    {
     cout<<s[i];
    }
    cout<<s[x];
    for(int i=slen-1;i>x;i--)//翻转分数号后面的数字
    {
     if(s[i]!='0')
     {
      u=i;
      break;
     }
    }
    for(int i=u;i>x;i--)
    {
     cout<<s[i];//输出后面翻转后的数字
    }
  }//分数处理完毕 
   if(s[x]=='%')
   {
    for(int i=slen-2;i>=0;i--)
    {
     if(s[i]!='0')
     {
      u=i;
      break;
     }
    
    }
    for(int i=u;i>=0;i--)
    cout<<s[i];
    cout<<s[x];
    } //百分数处理完毕
   }
   return 0;
}

代码确实有点长,但是比较容易理解。

猜你喜欢

转载自www.cnblogs.com/zhoubo123/p/11140834.html
今日推荐