【牛客網(wǎng)華為機試】HJ5 進制轉換

題目

描述

寫出一個程序,接受一個十六進制的數(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/

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容