題目
描述
寫出一個程序,接受一個十六進制的數(shù),輸出該數(shù)值的十進制表示。
輸入描述:
輸入一個十六進制的數(shù)值字符串。注意:一個用例會同時有多組輸入數(shù)據(jù),請參考帖子https://www.nowcoder.com/discuss/276處理多組輸入的問題。
輸出描述:
輸出該數(shù)值的十進制字符串。不同組的測試用例用\n隔開。
示例1
輸入:
0xA
0xAA
輸出:
10
170
解題思路
輸入的16進制前兩個字符必為‘0x’,所以先截掉前面兩個字符。16進制只會出現(xiàn)ABCDEF6個字母,所以提前創(chuàng)建字母對應數(shù)字的字典num_dict。創(chuàng)建一個初始值為0的result,用來記錄對應十進制的數(shù)值,接著循環(huán)每一個字符,將字符通過num_dict.get(in_str[i],in_str[i])轉換成數(shù)字后,根據(jù)對應的位置乘上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/