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

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

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

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

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

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

#include
#include
using namespace std;
int main()
{
 string s;
 cin>>s;
 int x=0;
 int slen=s.length();
 for(int i=0;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//翻转小数点后面的数字 
     {
      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<//输出后面翻转后的数字 
    }
  }//分数处理完毕 
   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;
}

 

 

 

 

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

转载于:https://www.cnblogs.com/zhoubo123/p/11140834.html

你可能感兴趣的:(数字翻转升级版(整数,小数,分数,百分数))