解题思路:
1.对于一个字符串进行操作,首先输入这个字符串,判断里面是否是.运算符或者是/运算符,因为这两种运算符操作起来要读取两个数值
2.设置一个翻转数组的change函数,去除前导0
3.然后对字符串进行操作,如果这个字符串是一个整数或者是%运算符,那么从字符串a中读取一个整数,然后放到change函数里改变,再将这个数直接输出即可
4.如果是小数或者分数,那么从字符串中读取两个整数和一个字符,把两个整数放到change函数里翻转,再将这两个整数和这个字符打印到数组b中,输出数组b即可,注意,字符数组b清零
#include<bits/stdc++.h>
using namespace std;
long long change (long long x)
{
long long sum=0;
while(x!=0)
{
sum=sum*10+x%10;
x=x/10;
}
return sum;
}
int main()
{
char a[30],b[30];
char ans;
bool flag=0;
cin>>a;
for(int i=0;i<=strlen(a)-1;i++)//依次遍历字符串
{
if(a[i]=='.'||a[i]=='/')//如果出现了这两种字符
{
ans=a[i];
flag=1;//flag标记为1,退出循环
break;
}
}
if(flag==0)//如果是整数或者是%
{
long long num;
if(a[strlen(a)-1]=='%')//如果是%
{
sscanf(a,"%ld%",&num);//读取一个整数
cout<<change(num)<<"%";//翻转后输出这个数再输出%
}
else//如果是整数
{
sscanf(a,"%ld",&num);//读取一个整数
cout<<change(num);//翻转后直接输出
}
}
else//如果是有操作符的话
{
long long num1,num2;
sscanf(a,"%ld%c%ld",&num1,&ans,&num2);//从字符串a中读取三个值
memset(b,0,sizeof(b));//清空b数组
sprintf(b,"%ld%c%ld",change(num1),ans,change(num2));//将三个值打印到数组b中
cout<<b<<endl;//输出字符数组b
}
return 0;
}