题目描述

给定一个数,请将该数各个位上数字反转得到一个新数。

这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分;分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母;百分数的分子一定是整数,百分数只改变数字部分。整数新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零;小数新数的末尾不为0(除非小数部分除了0没有别的数,那么只保留1个0);分数不约分,分子和分母都不是小数(约分滴童鞋抱歉了,不能过哦。输入数据保证分母不为0),本次没有负数。

输入格式

一个数s

输出格式

一个数,即s的反转数

输入输出样例

输入 #1复制

5087462
输出 #1复制

2647805
输入 #2复制

600.084
输出 #2复制

6.48
输入 #3复制

700/27
输出 #3复制

7/72
输入 #4复制

8670%
输出 #4复制

768%

说明/提示

所有数据:25%s是整数,不大于20位

25%s是小数,整数部分和小数部分均不大于10位

25%s是分数,分子和分母均不大于10位

25%s是百分数,分子不大于19位

(20个数据)

首先,我们看到这个题,易分析出这个题有四个步骤:拆分,翻转,去零,输出。

所以我们只要分开编出几个函数进行这几个操作即可。

经过观察,易发现:小数的小数部分需要去除的是后部的零,而其他的需要去除的是前部的零。

不多说了,直接上程序:(用的是对字符串的处理)(程序有点长,但思路非常简单易懂)

 #include<bits/stdc++.h>
#include <cstring>
using namespace std;
string qutou(string a)//作用:去除头部的零
{
int len;
while(a[]==''&&len!=)//如果第一位还是零
{
len=a.size();
a=a.substr(,len-);//把除了第一位之外的部分向前移动一位,覆盖第一位的零
}
return a;
}
string quwei(string a)//作用:去除头部的零
{
int len=a.size();
while(a[len-]=='')//如果第一位还是零
{
a=a.substr(,len- );//把除了最后一位之外的部分向后移动一位,覆盖最后一位的零
len--;
}
return a;
}
string fanzhuan(string a)//作用:将数翻转
{
int len=a.size();
string b;//创建一个临时字符串"b"
for(int i=len-;i>=;i--)//将a反向粘贴到b上
{
b+=a[i];
}
return b;//返回b
}
int main()
{
string front,behind,total;//字符串front,behind分别用来储存小数和分数的前半部分和后半部分
getline(cin,total);
int len=total.size(),n=,form=;
for(int i=;;i++)//遍历字符串
{
if(total[i]!='/'&&total[i]!='%'&&total[i]!='.')//如果当前位置不是特殊字符
{
front+=total[i];//将这个字符储存进front中
}
if(total[i]=='/')//如果是'/',说明分子已经读入结束
{
form=;//记录下这个数是分数
n=i+;
break;//结束读取分子
}
if(total[i]=='%')//如果是'%',说明百分数已经读入结束
{
form=;//记录下这个数是百分数
break;//结束读取
}
if(total[i]=='.')//如果是'.',说明整数部分已经读入结束
{
form=;//记录下这个数是小数
n=i+;
break;//结束读取整数部分
}
if(i==len-)//如果一直读取到了最后一位还没有特殊符号
{
form=;//记录下这个数是整数
break;//结束读取
}
}
if(form==||form==)//如果是分数或小数
{
for(int j=n;j<=len-;j++)//读取分母(或小数部分)
{
behind+=total[j];
}
behind=fanzhuan(behind);//翻转后部
}
front=fanzhuan(front);//翻转前部
front=qutou(front);//对前部进行去除头部的零
if(form==)//如果是分数
{
behind=qutou(behind);//对后部进行去除头部的零
if(front=="\0")//如果前部去头之后什么也不剩,说明前部是零
{
cout<<"0/"<<behind;
}
else
{
cout<<front<<"/"<<behind;//输出
}
}
if(form==)//如果是百分数
{
front=qutou(front);
if(front=="\0")//如果前部去头之后什么也不剩,说明前部是零
{
cout<<"0%";
}
else
{
cout<<front<<"%";//输出
}
}
if(form==)//如果是分数
{
behind=quwei(behind);//对后部进行去除尾部的零
if(behind=="\0")
{
if(front=="\0")//如果前部去头之后什么也不剩,说明前部是零
{
front="";
}
cout<<front<<".0";
}
else
{
cout<<front<<"."<<behind;//输出
}
}
if(form==)//如果是整数
{
front=qutou(front);
if(front=="\0")//如果前部去头之后什么也不剩,说明前部是零
{
cout<<"";
}
else
{
cout<<front;//输出
}
}
return ;
}

P1553 数字反转(升级版)的更多相关文章

  1. 洛谷P1553数字反转升级版

    题目链接:https://www.luogu.org/problemnew/show/P1553

  2. 洛谷 P1553 数字反转(升级版)【字符串+STL stack】

    P1553 数字反转(升级版) 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调 ...

  3. 洛谷 P1553 数字反转(升级版)

    P1553 数字反转(升级版) 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调 ...

  4. luogu P1553 数字反转(升级版)

    P1553 数字反转(升级版) 直通 思路: 首先使用char数组进行读入,然后直接按照题目要求进行反转即可, 但要注意的是对零的处理:(有点类似于高精去除前导零) ①去除只是整数.百分数的时候,反转 ...

  5. 字符串--P1553 数字反转(升级版)

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...

  6. P1553 数字反转(升级版)(copy(),reverse(),find(),substr(),erase())

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与 NOIp2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反 ...

  7. (Java实现) 洛谷 P1553 数字反转(升级版)

    题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调:小数反转是把整数部分的数反转, ...

  8. 洛谷P1553 数字反转(升级版)

    题目简介 题目描述       给定一个数,请将该数各个位上数字反转得到一个新数.       这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对 ...

  9. (水题)洛谷 - P1553 - 数字反转(升级版) - 字符串格式转换

    https://www.luogu.org/problemnew/show/P1553 忘记给整数加上前导零去除的代码了.其实不去也可以,额外的进位用一个carry另外存起来就好. #include& ...

随机推荐

  1. MBean 描述符

    简介 Tomcat 使用 JMX MBean 来实现自身的性能管理. 每个包里的 mbeans-descriptor.xml 是针对 Catalina 的 JMX MBean 描述. 为了避免出现 “ ...

  2. tag的使用

    tag = True while tag: print("level") choice = input("level>>>").strip() ...

  3. eclipse中如何配置maven

    1.首先需要在自己电脑中安装Maven,下载maven的路径:http://maven.apache.org/download.cgi 2.我们把下载好的文件解压到自己电脑的任意一个盘符中去,我的是e ...

  4. C# event 事件

    事件第二篇:https://www.cnblogs.com/FavoriteMango/p/11731485.html 曾经面试碰到一道设计题: 现有一个人,一群鸟,人有一把手枪,当人开枪时,所有的鸟 ...

  5. $Codeforces\ 522D\ Closest\ Equals$ 线段树

    正解:线段树 解题报告: 传送门$QwQ$ 题目大意是说给定一个数列,然后有若干次询问,每次询问一个区间内相同数字之间距离最近是多少$QwQ$.如果不存在相同数字输出-1就成$QwQ$ 考虑先预处理出 ...

  6. $POJ2411\ Mondriaan's\ Dream$ 状压+轮廓线$dp$

    传送门 Sol 首先状压大概是很容易想到的 一般的做法大概就是枚举每种状态然后判断转移 但是这里其实可以轮廓线dp 也就是从上到下,从左到右地放方块 假设我们现在已经放到了$(i,j)$这个位置 那么 ...

  7. 探索 模块打包 exports和require 与 export和import 的用法和区别

    菜单快捷导航: CommonJS 之 exports和require用法 ES6 Module 之 export 和 import 用法 CommonJS和ES6 Module的区别 循环依赖 和 解 ...

  8. 用本地自定义域名访问远程服务器,并支持websocket和cookie

    场景 在公司会有很多测试的机器,或者一些OA服务,Confluence,Jenkins,各种中间件的后台等等,都使用HTTP访问,且由于是内网机器没有域名,输入IP又要输入不同端口,访问起来比较麻烦. ...

  9. spring 与mybatis 整合

    步骤: pom文件添加依赖 创建包结构 添加application.yml, 配置数据库信息 使用mybatis-gennerator 生成三个文件 实体类 接口类 xml 文件 错误信息 xml 绑 ...

  10. centos7.3安装chrome

    Centos7安装chrome浏览器 1.配置yum源 在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repo cd /ect/yum.repos.d/ vim ...