题解 | #进制转换#

进制转换

https://www.nowcoder.com/practice/8f3df50d2b9043208c5eed283d1d4da6

import sys
while True:
    try:
        dic1 = {'A':10,'B':11,'C':12,'D':13,'E':14,'F':15}
        num16 = input()         ### 16进制数输入,注意格式:‘0x’或‘0X’开头,否则输入错误
        num16 = num16.upper()   ### 输入小写字母变大写字母
        num10 = 0               
        if not num16.startswith('0X'):   ### 检验是否16进制格式输入
            print('输入的不是16进制数')
            sys.exit()
        for i in range(2,len(num16)):    ### 不考虑‘0X’
            if num16[i].isdecimal():     ### 数字字符转化成整型
                num10 += (16**(len(num16)-i-1)) * int(num16[i])
            elif num16[i].isalpha():     ### 字母字符根据字典转成整型数
                if num16[i] <= 'F':      ### 字母ASCII码超过‘F’,显示输入错误
                    num10 += (16**(len(num16)-i-1)) * dic1[num16[i]]
                else:
                    print('输入错误')
                    sys.exit()
            else:                       ### 输入16进制数须为字母符号与数字符号,其他形式输入显示输入错误
                print('输入错误')
                sys.exit()
        if (num10 > (2**31 - 1)) or (num10 < 1):    ### 要求符合题目输出范围
            print('输入不在范围内')
        else:
            print(num10)
    except:
        sys.exit()

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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