靠谱的车
题目描述
程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。
出租车司机解释说他不喜欢数字4,所以改装了计费表,任何数字位置遇到数字4就直接跳过,其余功能都正常。
比如:
23再多一块钱就变为25;
39再多一块钱变为50;
399再多一块钱变为500;
小明识破了司机的伎俩,准备利用自己的学识打败司机的阴谋。
给出计费表的表面读数,返回实际产生的费用。
输入描述:
只有一行,数字 N
,表示里程表的读数。
(1<=N<=888888888
)。
输出描述:
一个数字,表示实际产生的费用。以回车结束。
示例1
输入:
5
输出:
4
说明:
5
表示计费表的表面读数。
4
表示实际产生的费用其实只有4块钱。
示例2
输入:
17
输出:
15
说明:
17
表示计费表的表面读数。
15
表示实际产生的费用其实只有15块钱。
示例3
输入:
100
输出:
81
说明:
100
表示计费表的表面读数。
81
表示实际产生的费用其实只有81块钱。
解题思路
这个问题本质上是一个如何将 9
进制的数转化为 10
进制的数,因为计价器数 9
次进一个位
我们通常的9进制表示包含的数字为
0
1
2
3
4
5
6
7
8
而题目中的数字使用的是
0
1
2
3
5
6
7
8
9
把目标数据的 5
6
7
8
9
替换为对应的 4
5
6
7
8
5 -> 4
6 -> 5
7 -> 6
8 -> 7
9 -> 8
替换后直接解析为十进制数据即可
源码 Java
public class Taxi {
Input input;
@BeforeEach
void setUp() {
input = new Input("888888888");
}
@Test
public void real() {
Map<Character, Character> map = new HashMap<>();
map.put('0', '0');
map.put('1', '1');
map.put('2', '2');
map.put('3', '3');
map.put('5', '4');
map.put('6', '5');
map.put('7', '6');
map.put('8', '7');
map.put('9', '8');
String s = input.nextLine();
StringBuilder sb= new StringBuilder();
// 将输入数据转换为我们通常习惯表示的 9 进制的数
for (int i = 0; i < s.length(); i++) {
sb.append(map.get(s.charAt(i)));
}
System.out.println(Integer.parseInt(sb.toString(), 9));
}
}
#如果中了500万,你会离职吗?##我想象的工作vs实际工作#