#P5705. 【深基2.例7】数字反转
【深基2.例7】数字反转
【深基2.例7】数字反转
题目来源
洛谷 P5705
题目描述
输入一个不小于 且小于 ,同时包括小数点后一位的一个浮点数,例如 ,要求把这个数字翻转过来,变成 并输出。
输入格式
一行一个浮点数。
输出格式
一行一个浮点数。
样例输入
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(题目要求原样反转,前导零保留)。