专栏文章

题解:P5705 【深基2.例7】数字反转

P5705题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mipbyv8c
此快照首次捕获于
2025/12/03 09:30
3 个月前
此快照最后确认于
2025/12/03 09:30
3 个月前
查看原文

题目大意

给定一个浮点数(说通俗点,就是小数),输出将其反转之后的浮点数。

思路

鲁迅曾经说过:“做题,就要一题多解。”
(下面将用对话的形式讲解)
思路 11
小 A 同学:这题我会!我学过一个东西叫做字符!它不仅能存储“字母字符”,还能存储“数字字符”!
teacher:OK,那我们顺着这个思路往下走,题目说这个数字大于 100100,也小于 10001000,同时只有 11 个小数位,再结合样例,数也数得出来,这一共有 55 个字符,可以用 55 个字符变量存储!
teacher:现在动手去试试!如果还是没想法就来看看代码吧!

CPP
#include <iostream>
using namespace std;

int main() {
    char a, b, c, d, e;
    cin >> a >> b >> c >> d >> e;
    cout << e << d << c << b << a;
    return 0;
}

思路 22
小 A 同学:这题我还会!我还学过模运算!
teacher:没错!我们假设 A=abc.dA = \overline{abc.d},那么我们先不管那个小数点,设 A=abcdA' = \overline{abcd}
那么,我们要的答案 SS(去掉小数点后)满足
S=d×1000+c×100+b×10+aS = d \times 1000 + c \times 100 + b \times 10 + a
接下来,我们分别处理出 a,b,c,da, b, c, d。它们分别是:
a=[A÷1000],a = [A' \div 1000], b=[A÷100]mod10,b = [A' \div 100] \bmod 10, c=[A÷10]mod10,c = [A' \div 10] \bmod 10, d=Amod10d = A' \bmod 10
这里,[a][a] 表示不超过 aa 的最大整数,也就是向下取整。但是在 c++ 中,整型除法是自动向下取整的,所以你不用担心。
teacher:最后处理好小数点即可。下面是代码
CPP
#include <iostream>
using namespace std;

int main() {
    double A;
    cin >> A;
    int A1 = A * 10;
    int a = A1 / 1000;
    int b = A1 / 100 % 10;
    int c = A1 / 10 % 10;
    int d = A1 % 10;
    cout << d << "." << c << b << a;
    return 0;
}
小 A;等等,输出好像就是从字符变成了整型,看起来这种方法太复杂了。
teacher:其实不然,在算法竞赛里,很多情况下需要处理出一个数字中的每一位,出了转换成字符串之外,这种思想也是很重要的。

其实,以上仅仅是两种比较方便而且不超出目前的你的知识范畴的方法,以后还有字符串,格式化输入输出等等等等方法,等着你探索。

最后,用庄子的一句话作为结尾吧。
“吾生也有涯,而知也无涯。” ——庄子
加油探索吧!QWQ

评论

0 条评论,欢迎与作者交流。

正在加载评论...