注册 登录
每天一道算法题

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

第二章:进制的转换

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

第四章:子序列问题

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

2.1节:十进制转二进制

薯条老师 2021-03-30 16:20:53 207983 0

编辑 收藏

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

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

2.1.1 算法思路

十进制正整数转换为其它进制的整数可通过"除基数取余再逆序排列"的方法来计算。由于要转换的目标进制为二进制,所以基数为2。除基数取余是指将十进制数作为被除数,基数2作为除数。逆序排列是指将每次计算得到的余数最后再倒序排列起来。具体的计算过程如下图所示:

图片.png

负数在计算机中使用补码进行表示,为简化问题的求解,本节只讲解如何将十进制正整数转换为二进制。

2.1.2 算法实现

# __author__ = 薯条老师


def itoa(number, radix=2):
    """
    :param number:待转换的十进制数
    :param radix: 进制的基数,默认为2,表示将number转换为二进制
    :return: 返回参数radix所对应的进制的字符串
    """
    
    radix_prefix = {2: "0b", 8: "0",  10: "", 16: "0x"}
    try:
        prefix = radix_prefix[radix] if number >= 0 else "-"+radix_prefix[radix]
    except KeyError:
        raise ValueError("unsupported radix:{}".format(radix))
        
    number = -number if number < 0 else number
    remainders = []
    
    # 思考题:为什么判断条件为number > 1?
    while number > 1:
        # 将余数逆序插入至列表中
        remainders.insert(0, str(number % radix))
        number //= radix
    else:
        remainders.insert(0, str(number % radix))
        
    
    return prefix+"".join(remainders)
    
    
if __name__ == "__main__":
    print(itoa(-9))

以上代码尚有未完善的地方,请同学们将算法进行优化,以支持其它进制的转换。

2.1.3 最具实力的小班培训

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

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

扫码免费领取学习资料:



欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录