#P5705. 【深基2.例7】数字反转

【深基2.例7】数字反转

【深基2.例7】数字反转

题目来源

洛谷 P5705

题目描述

输入一个不小于 100100 且小于 10001000,同时包括小数点后一位的一个浮点数,例如 123.4123.4 ,要求把这个数字翻转过来,变成 4.3214.321 并输出。

输入格式

一行一个浮点数。

输出格式

一行一个浮点数。

样例输入

123.4

样例输出

4.321

提示

一、字符串:一串字符放在一起

前面一个 char 只能存一个字符。要存一串,用字符数组:

char s[20];              // 最多存 19 个字符 + 1 个结束符
scanf("%s", s);          // 读一个不含空格的字符串
printf("%s\n", s);       // 输出整个字符串

char s[20] 的意思是:开辟 20 个连续的位置,每个放一个字符。字符串末尾会额外占一个位置放 '\0'(结束标记),所以实际能存 19 个字符。开数组时宁大勿小,多开几个不花钱,开小了会越界。

二、读字符串不加 &

这是最容易记错的一点:

scanf("%s", s);      // 正确
scanf("%s", &s);     // 不要这么写

因为数组名 s 本身代表这块内存的起始地址,再加 & 就变成「地址的地址」了。而读 int、double 必须加 &,两者规则不同。

三、%s 的读取规则

  • 从第一个非空白字符开始读;
  • 遇到空格、换行、Tab 就停;
  • 不会检查数组有没有越界(这是 C 的历史包袱),所以数组一定要开够。

四、访问单个字符

char s[20] = "abc";
printf("%c\n", s[0]);   // a
printf("%c\n", s[2]);   // c

下标从 0 开始:第 1 个字符是 s[0],第 n 个是 s[n-1]。这个「从 0 开始」后面数组题会一直用。

五、常见错误

  • 数组开太小:题目说长度不超过 10,至少开 char s[15]。

  • 读的时候加了 &。

  • 以为 s[1] 是第一个字符。

  • 输入形如 123.4,小数点位置固定。用数字运算处理小数点会很别扭。

  • 换个视角:把它当成一串字符读进来,再倒着输出这串字符。

  • 倒着输出时,小数点会自然跑到新位置,正好就是题目要的 4.321。

自查:用 123.4 → 4.321 验证;再试 100.0,看输出是不是 000.1(题目要求原样反转,前导零保留)。