注册 登录
每天一道算法题

第一章:计算最值,次最值

第二章:进制的转换

第三章:质数,水仙花,公约数

第四章:子序列问题

首页 > 每天一道算法题 > 第二章:进制的转换 > 2.3节:十六进制转十进制

2.3节:十六进制转十进制

薯条老师 2021-04-01 16:06:05 207483 0

编辑 收藏

广州番禺Python, Java小班周末班培训

薯条老师的线下Python小班办得很好,学员的平均就业薪资有11K。线下小班培训的课程有Python爬虫,Python后端开发,Python办公自动化,Python大数据分析,Python量化投资,Java中高级后端开发。授课详情请点击:http://chipscoco.com/?cate=6

2.3.1 算法思路

将其它进制转换为十进制,需要掌握一个权值的概念。在进制的权值计算中,第N位的权值为基数的N次方,比如在十六进制中,基数为16,那么第0位的权值为16的0次方,第1位的权值为16的1次方。
因为高位的数是由低位的数进位而来的,在进位的过程中以进制中的基数为单位进行进位,这就是所谓的权值的概念。

其它进制转换为十进制,需要将各位的数字与权重相乘再进行求和。例如,将十六进制10转换为十进制:

# 十六进制10的第0位数为0,权值为16的0次方;第1位数为1,权值为16的1次方。

1*161+0*160 = 16

关于十六进制的详细介绍,可学习这篇教程:http://chipscoco.com/?id=14

2.3.2 算法实现

# __author__ = 薯条老师


def atoi(nptr, base=16):
    """
    :param nptr: 字符串类型, 指向一个合法的进制数
    :param base:参数nptr所指向的数字或数字字符串的进制基数
    :return: 返回参数x转换后的十进制值
    """
    
    integer, power, sign = 0,  0, 1
    nptr = nptr.strip()
    if nptr[0] == "-":
        sign = -1
        nptr = nptr[1:]
        
    nptr = nptr[2:] if nptr[:2] in {"0X", "0x"} else nptr
    for n in nptr[::-1]:
        _, dec = "0", 0
        if "A" <= n <= "F":
            _, dec = "A", 10
        elif "a" <= n <= "f":
            _, dec = "a", 10
            
        n = ord(n)-ord(_)+dec
        if base == 16 and (n < 0 or n > 15):
            raise ValueError("invalid literal with base 16")
        integer += n * base ** power
        power += 1
    return sign * integer
    
    
    
if __name__ == "__main__":
    print(atoi("-0x12\n"))

2.3.3 最具实力的小班培训

来这里参加Python和Java小班培训的学员大部分都找到了很好的工作,平均月薪有11K,学得好的同学,拿到的会更高。由于是小班教学,所以薯条老师有精力把每位学员都教好。打算参加线下小班培训的同学,必须遵守薯条老师的学习安排,认真做作业和项目。把知识学好,学扎实,那么找到一份高薪的工作就是很简单的一件事。

(1) Python后端工程师高薪就业班,月薪11K-18K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十五万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪11K-20K, 免费领取课程大纲
(4) Python大数据分析,量化投资就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:


欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录