题目是对小数,整数,百分数,分数进行反转,具体题目点链接
https://www.luogu.com.cn/problem/P1553
用字符串来装,通过判断非数字的字符,来判断需要反转的数是什么类型;
之后写四种方法分别反转四类数,首位或者末尾遇到零注意跳过后在输出
1,整数:注意0
2,百分数:注意0%
3,分数:注意1010/10100
4,小数:注意0.001;
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int mid=0;
for(int i=0;i<=s.length()-1;i++)//找到小数,百分数,分数的标志
{
if(s[i]<'0'||s[i]>'9')
{
mid=i;
}
}
if(mid==0)//整数
{
int i=s.length()-1;
while(s[i]=='0'&&i!=0)//判断最后一位是不是0,并且i!=0,是为了防止只有0这种情况
{
i--;
}
for(;i>=0;i--)
{
cout<<s[i];
}
}
else if(s[mid]=='%')//百分数
{
int i=mid-1;
while(s[i]=='0'&&i!=0)//判断最后一位是不是0,并且i!=0,是为了防止只有0这种情况
{
i--;
}
for(;i>=0;i--)//符号前面
{
cout<<s[i];
}
cout<<"%";
}
else if(s[mid]=='.')//小数
{
int i=mid-1; //符号前面
while(s[i]=='0'&&i!=0)
{
i--;
}
for(;i>=0;i--)
{
cout<<s[i];
}
cout<<"." ;
int r=mid+1;//符号后面的第一个数
while(s[r]=='0'&&r!=s.length()-1)//这种情况,找到小数点后第一个不为0的数,并且防止1.0这种情况
{
r++;
}
for(int j=s.length()-1;j>=r;j--)
{
cout<<s[j];
}
}
else if(s[mid]=='/')//分数
{
int i=mid-1;
while(s[i]=='0'&&i!=0)//判断最后一位是不是0,并且i!=0,是为了防止只有0这种情况
{
i--;
}
for(;i>=0;i--)//符号前面
{
cout<<s[i];
}
cout<<"/" ;
int r=s.length()-1;//符号后面
while(s[r]=='0')//分母不为0,一定存在不为0的数位
{
r--;
}
for(;r>=mid+1;r--)
{
cout<<s[r];
}
}
return 0;
}