【牛客网华为机试】HJ5 进制转换

题目

描述

写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。

输入描述:

输入一个十六进制的数值字符串。注意:一个用例会同时有多组输入数据,请参考帖子https://www.nowcoder.com/discuss/276处理多组输入的问题。

输出描述:

输出该数值的十进制字符串。不同组的测试用例用\n隔开。

示例1

输入:

0xA

0xAA

输出:

10

170

解题思路

输入的16进制前两个字符必为‘0x’,所以先截掉前面两个字符。16进制只会出现ABCDEF6个字母,所以提前创建字母对应数字的字典num_dict。创建一个初始值为0的result,用来记录对应十进制的数值,接着循环每一个字符,将字符通过num_dict.get(in_str[i],in_str[i])转换成数字后,根据对应的位置乘上16的(len(in_str)-i-1)次方,最后求和。

>>>in_str = "0xAA"

>>>in_str[2:]

'AA'

>>>num_dict = {"A":10, "B":11, "C":12, "D":13, "E":14, "F":15}

>>>num_dict.get(3,3)

3

>>>num_dict.get('A','A')

10

>>>in_str = in_str[2:]

>>>len(in_str)

2

>>>i = 0

>>>len(in_str)-i-1

1

>>>num_dict.get('A','A')*(16**1)

160

>>>i = 1

>>>len(in_str)-i-1

0

>>>num_dict.get('A','A')*(16**0)

10

>>>160+10

170

代码

while True:

    try:

        in_str = input()[2:]

        num_dict = {"A":10, "B":11, "C":12,

                  "D":13, "E":14, "F":15}

        result = 0

        for i in range(len(in_str)):

            result = result + int(num_dict.get(in_str[i], in_str[i])) * (16**(len(in_str)-i-1))

        print(result)

    except Exception as e:

        break

Reference

https://www.nowcoder.com/ta/huawei/

你可能感兴趣的:(【牛客网华为机试】HJ5 进制转换)