数字翻转分为很多类,包括整数(这类最好处理)小数,分数,百分数;
对于这些集合在一起,我们就可以将数字转化为字符串处理;
对于整数和百分数,我们翻转时,只需要将后面的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;
}
代码确实有点长,但是比较容易理解。