题目描述
大嘴猫吃完金币,玩完卡牌之后心满意足,OH很是嫉妒,于是强迫大嘴猫完成以下任务:
给大嘴猫一个数(整数、小数、分数),让它找出该数的反转。
-
整数反转是将所有数位对调。
-
小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分。
-
分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母。
输入
一个非负数 s。
输出
一个数,即 s 的反转数。
样例输入 Copy
20220109
样例输出 Copy
90102202
提示
样例2:
输入:14.00
输出:41.0
样例3:
输入:13/14
输出:31/41
-
s是整数,不大于20位
-
s是小数,整数部分和小数部分均不大于10位
-
s是分数,分子和分母均不大于10位,数据分母保证不为0,不用约分
-
对于所有部分而言,如果除了0没有别的数,那么只保留一个0,注意前导零也要去掉
思路:先判断该数字是整数?分数?小数?
用到一个isdigit()函数
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
string s;
cin>>s;
int len;
len=s.size();
int idx=0;
char p;
for(int i=0;i<len;i++)
{
if(!isdigit(s[i]))
{ p=s[i];
idx=i;
break;
}
}
if(!idx)
{ while(s[len-1]=='0') len--;
for(int i=len-1;i>=0;i--)
{
cout<<s[i];
}
if(len-1<0) cout<<'0';
}//整数
else if(p=='/'||p=='.')
{
int x=idx-1,y=idx+1;
while(s[x]=='0') x--;
for(int i=x;i>=0;i--)
{
cout<<s[i];
}
if(x-1<0) cout<<'0'<<p;
else cout<<p;
while(s[len-1]=='0') len--;
for(int i=len-1;i>=y;i--)
{
cout<<s[i];
}
if(len-1==idx) cout<<'0';
}//分数小数
return 0;
}