1 条题解
-
0
题意分析:
本题给定一个有缺陷的汽车里程计的读数,里程计在显示数字时跳过数字 4,即在每个位上数字按顺序为 0, 1, 2, 3, 5, 6, 7, 8, 9。这相当于一个没有 4 的数字系统,每一位实际上是在“9 进制”的概念下变化,但数字 4 被跳过了。因此题意就是将一个“缺4进制”转换为十进制数。
解题思路:
1、数据预处理:
预先计算出 9 的各个次幂(即 9^0, 9^1, …, 9^10),方便后续将各位数字乘以对应的权值。
2、数字修正:
对于读数中的每个数字,从个位开始处理:如果数字大于 4,则说明原本的数字在标准进制中应比当前数值小 1(因为数字 4 被跳过了),因此需要将该数字减 1 以得到正确的数值。
3、累加计算:
从低位到高位遍历字符串,对每一位的修正后数字乘以对应的 9 的幂次,然后累加起来,得到转换后的十进制数值,也就是汽车实际行驶的英里数。
本题代码
#include <cstdio> #include <cstring> int nine[11] = { 1 }; int main() { char s[20], ch; int i, sum, j; for (i = 1; i <= 10; i++) nine[i] = nine[i - 1] * 9; while (scanf("%s", s) && s[0] - '0') { sum = j = 0; for (i = strlen(s) - 1; i >= 0; i--, j++) { if ((ch = s[i]) > '4') ch--; sum += nine[j] * (ch - '0'); } printf("%s: %d\n", s, sum); } return 0; }
- 1
信息
- ID
- 1719
- 时间
- 1000ms
- 内存
- 64MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者