当前位置: 首页 > news >正文

题解:洛谷 P1553 数字反转(升级版)

【题目来源】

洛谷:P1553 数字反转(升级版) - 洛谷

【题目描述】

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

这次与 NOIP2011 普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。

  • 整数反转是将所有数位对调。
  • 小数反转是把整数部分的数反转,再将小数部分的数反转,不交换整数部分与小数部分。
  • 分数反转是把分母的数反转,再把分子的数反转,不交换分子与分母。
  • 百分数的分子一定是整数,百分数只改变数字部分。

【输入】

一个实数 \(s\)

【输出】

一个实数,即 \(s\) 的反转数

【输入样例】

700/27

【输出样例】

7/72

【算法标签】

《洛谷 P1553 数字反转(升级版)》 #模拟# #字符串# #洛谷原创#

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间/*** 翻转整数部分* @param s 要翻转的数字字符串*/
void f0(string s) 
{int len = s.length();  // 获取字符串长度int mark;              // 标记第一个非零字符的位置// 从后往前找到第一个非零字符for (mark = len - 1; mark >= 0; mark--) {if (s[mark] != '0') break;}// 如果全是零,输出0并返回if (mark < 0) {cout << 0;return;}// 从第一个非零字符开始倒序输出for (int i = mark; i >= 0; i--) {cout << s[i];}
}/*** 翻转小数部分* @param s 要翻转的小数字符串*/
void f1(string s) 
{int m = s.find(".");            // 找到小数点位置int len = s.length();          // 获取字符串长度string s1 = s.substr(0, m);    // 提取整数部分string s2 = s.substr(m + 1, len - m - 1);  // 提取小数部分f0(s1);                         // 翻转整数部分cout << '.';                    // 输出小数点// 处理小数部分前导零int mark = 0;for (mark = 0; mark < s2.length(); mark++) {if (s2[mark] != '0') break;}// 如果小数部分全是零,输出0并返回if (mark >= s2.length()) {cout << 0;return;}// 翻转小数部分(去掉末尾的零)for (int i = s2.length() - 1; i >= mark; i--) {cout << s2[i];}
}/*** 翻转分数部分* @param s 要翻转的分数字符串*/
void f2(string s) 
{int m = s.find("/");            // 找到分数线位置int len = s.length();           // 获取字符串长度string s1 = s.substr(0, m);     // 提取分子部分string s2 = s.substr(m + 1, len - m - 1);  // 提取分母部分f0(s1);                         // 翻转分子部分cout << '/';                    // 输出分数线f0(s2);                         // 翻转分母部分
}/*** 翻转百分数部分* @param s 要翻转的百分数字符串*/
void f3(string s) 
{int m = s.find("%");            // 找到百分号位置int len = s.length();           // 获取字符串长度string s1 = s.substr(0, m);    // 提取数字部分f0(s1);                         // 翻转数字部分cout << '%';                    // 输出百分号
}int main()
{string s;                       // 定义字符串:存储输入的数字cin >> s;                       // 输入数字字符串// 根据数字类型调用对应的处理函数if (s.find("/") != -1)          // 如果是分数{f2(s);} else if (s.find("%") != -1)      // 如果是百分数{f3(s);} else if (s.find(".") != -1)     // 如果是小数{f1(s);} else                             // 如果是整数{f0(s);}return 0;                       // 程序正常结束
}

【运行结果】

700/27
7/72
http://www.jsqmd.com/news/387500/

相关文章:

  • 题解:洛谷 P1308 [NOIP 2011 普及组] 统计单词数
  • Shell echo 命令
  • 照着用就行:研究生专属降AIGC平台 千笔·降AI率助手 VS 万方智搜AI
  • 美容店怎么进行AI推广 - 品牌企业推荐师(官方)
  • 本科生收藏!千笔·专业学术智能体,倾心之选的AI论文平台
  • 题解:洛谷 P5734 【深基6.例6】文字处理软件
  • 题解:洛谷 P5015 [NOIP 2018 普及组] 标题统计
  • 题解:洛谷 P3741 小果的键盘
  • 【前端】Scroll Reveal 动画库高效上手入门教程
  • 数据上图工具:多图层叠加,灵活管理空间数据
  • 题解:洛谷 P1765 手机
  • 题解:洛谷 P1957 口算练习题
  • Vibe Coding的终极秘密,我偷偷用了半年的AI神器,今天决定不藏了,都分享给大家了~~~~
  • 格式转换工具:主流格式互转,结果直接上图预览
  • 坐标拾取工具:支持点线面绘制,结果直接导出
  • 少走弯路:降AIGC工具 千笔AI VS PaperRed,专科生专属高效选择
  • 用数据说话 8个AI论文网站测评:专科生毕业论文写作全攻略
  • 改稿速度拉满! 千笔,本科生论文写作神器
  • 2026 国内智适应动力模块工厂热门推荐的排行情况,回风箱式电子除尘净化器/射流空调机组,智适应动力模块制造企业推荐 - 品牌推荐师
  • 行业内评价最高口碑最好的入户门有哪些?2026十大领军品牌深度解析 - 匠言榜单
  • 题解:洛谷 P5733 【深基6.例1】自动修正
  • 题解:洛谷 P1125 [NOIP 2008 提高组] 笨小猴
  • 题解:洛谷 P1914 小书童——凯撒密码
  • 2026必备!千笔ai写作,碾压级的AI论文网站
  • 2003-2023年地级市经济高质量发展指数
  • 题解:洛谷 P2911 [USACO08OCT] Bovine Bones G
  • 题解:洛谷 P1205 [USACO1.2] 方块转换 Transformations
  • 2000-2024年上市公司制度性交易成本及分组
  • 题解:洛谷 P1614 爱与愁的心痛
  • 1997—2025年上市公司区块链技术专利数据