Jacky's Blog Jacky's Blog
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习
  • 4
  • 0

Python 三位一并法

Jacky
2 10 月, 2019

这两天帮同学解了一些题目,这里总结一下算法。

0x00 题目

请写一个 Python 程序实现实数的「三位一并法」与「四位一并法」。输入一个八进制小数,利用三位一并法将其转换为二进制实数,并输出,再利用四位一并法将上一步得到的二进制实数转换为十六进制实数,并输出。e.g. 输入 2.04(8) 输出 010.00100(2) 和 2.1(16)。

0x01.知识储备

二进制与八进制数之间的对应关系

二进制数八进制数
0000
0011
0102
0113
1004
1015
1106
1117

八进制转二进制的方法是三位一并法的逆用

八进制数16.71
二进制数001110.111001

二进制转化为十进制的方法是,三位一并法

举个栗子 010.000100(2) 的转化,以小数点为界,整数和小数部分内每三位数为一组进行分组进行转化。

二进制数010.000100
八进制数2.04

那如果分组时无法凑足三位,则需要进行补位

举个栗子 1010.0001001(2) 的转化,对整数部分,在最左边补充0,对于小数部分,在最右边补充0,即:

二进制001010.000100100
八进制12.044

0x02 Python 的实现

# coding=utf-8
print('请输入一个八进制小数:')
oct_num = input()
binary = ''
is_minus = False
# 三位一并法逆用: 8进制小数转2进制小数
for o in oct_num:
if o == '.':
binary += '.'
elif o == '-':
# 处理负数
binary += ''
is_minus = True
else:
binary += format(int(o), '03b') # 格式化字符串,强制宽度为3字节
# 负数处理
sym = '-' if is_minus is True else ''
print(sym + binary)

文章最后修订于 2020年8月31日

4
本文系作者 @Jacky 原创发布在 Jacky's Blog。未经许可,禁止转载。
C 冒泡排序
上一篇
Python 四位一并法
下一篇

评论 (0)

再想想
暂无评论

近期评论

  • uesr 发表在《留言板》
  • Jacky 发表在《留言板》
  • uesr 发表在《留言板》
  • Jacky 发表在《留言板》
  • uesr 发表在《留言板》
4
Copyright © 2016-2025 Jacky's Blog. Designed by nicetheme.
粤ICP备16016168号-1
  • 首页
  • 关于
  • 项目
  • 大事记
  • 留言板
  • 友情链接
  • 分类
    • 干货
    • 随笔
    • 项目
    • 公告
    • 纪念
    • 尝鲜
    • 算法
    • 深度学习

搜索

  • Mac
  • Apple
  • OS X
  • iOS
  • macOS
  • Linux
  • 阿里云
  • WordPress
  • 运维
  • macOS Sierra

Jacky

Go Python C C++ | 弱冠之年 | 物联网工程
183
文章
195
评论
267
喜欢