当前位置: 首页 > article >正文

【十进制整数转换为其他进制数——短除形式的贪心算法】

之前写过一篇用贪心算法计算十进制转换二进制的方法,详见:用贪心算法计算十进制数转二进制数(整数部分)_短除法求二进制-CSDN博客

经过一段时间的研究,本人又发现两个规律:

1、不仅仅十进制整数转二进制可以用贪心算法,十进制转其他进制一样适用;

2、可以用短除的形式进行贪心算法转换,使转换更加直观。

目录

一、按权展开求和法

二、贪心法的思路

三、贪心算法的短除形式

1、短除法

2、图解说明

四、实例


一、按权展开求和法

假设要转换的十进制数为D,转换的目标进制为N进制,假设转换完的结果为

D=( k_{n-1}k_{n-2}...k_{0})_{N}                                                      (1)

在转换完的N进制数中,从右向左,数字的位置编号(也叫数位)i从0开始,一直到n-1(有些文献把最右边最低位的编号定为1,本文为了方便后续计算,定为0)。k_{i}为第i位的数字,对应位的权值(权值就是在这个数位上,每个1代表的数值)为N^{i}

那么根据按权展开求和法有:

D=k_{n-1}*N^{n-1}+...+k_{2}*N^{2}+k_{1}*N^{1}+k_{0}*N^{0}                 (2)

二、贪心法的思路

第一步:找出在十进制数D中包含的其他进制的最大权值N^{i},并算出对应的数位序号i

第二步:用D除以N^{i},求出商k_{i}(也就是第i位对应的数字),以及余数r_{i}

第三步:如果r_{i}不等于0,令D=r_{i},回到第一步继续计算;

第四步:当r_{i}=0时,转换结束;

第五步:计算出转换结果,把所求出的k_{i}都填到相应的第i位,没有数字的位上补0

三、贪心算法的短除形式

1、短除法

用短除法的形式进行贪心算法转换的过程如下图所示:

图1 贪心算法的短除形式

2、图解说明

先找出当前D包含的最大权值N^{i},D为被除数,放在短除号上侧,N^{i}为除数,放在短除号左侧,求出的商k_{i}放在短除号右侧,余数r_{i}放在短除号下侧。如果r_{i}不等于0,把r_{i}看成D,继续进行计算,直到r_{i}=0,短除结束。把右侧的一系列商填入对应的数位,没有商的数位补0,转换完成。

四、实例

下边用3个例子,分别演示一下如何用短除形式的贪心算法把十进制整数转换为二进制、八进制、十六进制数。

例1:把十进制数(35)D转换为二进制数。

计算过程如图2所示:

图2  十进制转二进制

计算说明如下:

第一步:(35)D中包含的2进制的最大权值为2^{5}=32,对应数位为第5位;

第二步:35/32=1余3,第5位对应的数字为1;

第三步:D=3,继续计算,3中包含的最大权值为2^{1}=2,对应数位为第1位;

第四步:3/2=1余1,第1位对应的数字为1;

第五步:D=1,继续计算,1中包含的最大权值为2^{0}=1,对应数位为第0位;

第六步:1/1=1余0,第0位对应的数字为1,余数为0,计算结束。

第七步:序号为第5、第1和第0的数位,商都为1,其他位没有商,对应数字为0,所以转换的结果为(100011)B。

例2:把十进制数(168)D转换为八进制数。

求解过程如图3所示:

图3  十进制转八进制

例3:把十进制数(951)D转换为十六进制数。

求解过程如图4所示:

图4  十进制转十六进制

(全文结束)


http://www.kler.cn/a/441055.html

相关文章:

  • 常见“栈“相关题目
  • 计算机网络一点事(22)
  • 仿真设计|基于51单片机的无线投票系统仿真
  • PythonFlask框架
  • Go反射指南
  • 芯片AI深度实战:基础篇之langchain
  • 【kubernetes】kubectl get nodes报NotReady
  • iOS和安卓,怎样才能轻松实现文件互传?
  • 爬虫运行中遇到反爬虫策略怎么办
  • Leetcode:1338
  • vim save
  • SSM虾米音乐项目6--后台专辑模块的修改和删除
  • 2024安装hexo和next并部署到github和服务器最新教程
  • 【windows-bat脚本】-修改系统时间
  • 实时数仓中涉及更新历史数据(如小时、天、月的汇总数据)时,数据库是否支持 UPSERT(存在更新,否则插入)会显著影响解决方案。
  • 白平衡和色彩偏移使用(富士)
  • 2025erp系统开源免费进销存系统搭建教程/功能介绍/上线即可运营软件平台源码
  • 数据可视化-2. 条形图
  • 流程图(一)利用python绘制弦图
  • 如何使用Nginx Proxy Manager实现反向代理与SSL支持高效管理网络服务
  • 读心术小游戏(附加源码)
  • 淘宝评论API接口:解锁电商数据洞察的钥匙
  • iOS开发 UIAlertView与UIActionSheet替换方案之SDAlertView与SDActionSheet
  • 【我的Android进阶之旅】使用Kotlin 代理/委托优雅地处理接口空实现:干掉接口中所有需要强制实现的但是无用的空方法实现!
  • 优化算法中的凸函数
  • linux下观察进程捕获信号的情况