横跨五年的"洛谷P5705[深基2.例7]数字反转"题解
正好卡在2025年情人节前夕,突发奇想打开了许久未看的洛谷,想看看里面的算法题,然后发现了一道在几年前有多次提交记录的题
P5705 【深基2.例7】数字反转
P5705 【深基2.例7】数字反转
题目描述
输入一个不小于 $100$ 且小于 $1000$,同时包括小数点后一位的一个浮点数,例如 $123.4$ ,要求把这个数字翻转过来,变成 $4.321$ 并输出。
输入格式
一行一个浮点数
输出格式
一行一个浮点数
输入输出样例 #1
输入 #1
1 |
|
输出 #1
1 |
|
2020年4月的题解
1 |
|
不知道当时的自己是处于什么精神状态写下来这段屎….
直接拉出来DeepSeek解释吧:
这段代码的目的是将一个浮点数进行处理,生成一个新的字符串。具体步骤如下:
- 输入处理:用户输入一个浮点数。
- 整数部分提取:将浮点数转换为整数,提取整数部分。
- 小数部分提取:用浮点数减去整数部分,得到小数部分。
- 整数部分反转:将整数部分转换为字符串并反转。
- 小数部分处理:将小数部分四舍五入到一位小数,并提取小数点后的第一位数字。
- 结果拼接:将处理后的小数部分和反转后的整数部分拼接成一个新的字符串。
转念一想,就这样提交上去肯定不行啊,所以我又在今天添加了新的题解
2025年2月的题解
刚开始我是这样写的
1 |
|
满怀信心的提交,期待看到绿色的AC
结果只能WA的一声哭出来
经历了各种微调,都没发现问题所在,上头的我直接用C怼了上去
1 |
|
接着有一瞬间感觉不对劲,为什么c用的是%c
在重新阅读题解之后,我发现题目要求明确写了:
输出格式
一行一个浮点数
所以我把代码改成了
1 |
|
不出预料的,Accepted
进一步优化
既然已经成功 AC 了,接下来就要考虑如何让代码更简洁、优雅。本来我是打算参考题解中大佬的解法的,但是点进去翻找半天并没有Python的高级解法。
Python 作为一门强调简洁的语言,肯定能写出更短的版本。于是我开始琢磨——有没有办法减少循环,甚至去掉list()
这个转换
首先,我想到 Python 字符串本身是可迭代的,不需要转换成 list 也能按索引访问。这样num = list(input())
其实可以直接写成:
1 |
|
这样就少了一步转换操作
然后,for i in range(len(num))
只是为了遍历num
的每一位并倒序输出,其实 Python 早就有内置方法能更优雅地做到这一点,比如[::-1]
这个切片操作,就可以直接反转字符串
于是,代码可以进一步缩短成这样:
1 |
|
其实我们还可以利用Lambda 函数和map让代码更 牛逼高级 一些
1 |
|
这段代码的核心仍然是x[::-1]
进行字符串反转,并用float()
转换格式,最后用lambda
使其成为匿名函数,直接处理输入并打印结果
虽然代码变得更炫了,但其实并没有提升效率,甚至降低了可读性😂
如果存在实际应用的情况,还是推荐原版的
1 |
|