靠谱的车

题目描述

程序员小明打了一辆出租车去上班。出于职业敏感,他注意到这辆出租车的计费表有点问题,总是偏大。

出租车司机解释说他不喜欢数字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实际工作#
全部评论

相关推荐

白火同学:1、简历可以浓缩成一页,简历简历先要“简”方便HR快速过滤出有效信息,再要“历”用有效信息突出个人的含金量。 2、教育背景少了入学时间~毕业时间,HR判断不出你是否为应届生。 3、如果你的平台账号效果还不错,可以把账号超链接或者用户名贴到对应位置,一是方便HR知道你是具体做了什么内容的运营,看到账号一目了然,二是口说无凭,账号为证,这更有说服力。
面试被问期望薪资时该如何...
点赞 评论 收藏
分享
评论
1
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务