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

· · 题解

题目大意

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

思路

鲁迅曾经说过:“做题,就要一题多解。”

(下面将用对话的形式讲解)

思路 1

小 A 同学:这题我会!我学过一个东西叫做字符!它不仅能存储“字母字符”,还能存储“数字字符”!

teacher:OK,那我们顺着这个思路往下走,题目说这个数字大于 100,也小于 1000,同时只有 1 个小数位,再结合样例,数也数得出来,这一共有 5 个字符,可以用 5 个字符变量存储!

teacher:现在动手去试试!如果还是没想法就来看看代码吧!

#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;
}

思路 2

小 A 同学:这题我还会!我还学过模运算!

teacher:没错!我们假设 A = \overline{abc.d},那么我们先不管那个小数点,设 A' = \overline{abcd}

那么,我们要的答案 S(去掉小数点后)满足

S = d \times 1000 + c \times 100 + b \times 10 + a

接下来,我们分别处理出 a, b, c, d。它们分别是:

a = [A' \div 1000], b = [A' \div 100] \bmod 10, c = [A' \div 10] \bmod 10, d = A' \bmod 10

这里,[a] 表示不超过 a 的最大整数,也就是向下取整。但是在 c++ 中,整型除法是自动向下取整的,所以你不用担心。

teacher:最后处理好小数点即可。下面是代码

#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