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

embedded/2024/12/22 0:49:17/

之前写过一篇用算法>贪心算法计算十进制转换二进制的方法,详见:用算法>贪心算法计算十进制数转二进制数(整数部分)_短除法求二进制-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.ppmy.cn/embedded/147664.html

相关文章

[Unity]【图形渲染】【游戏开发】Shader数学基础4-更多矢量运算

在计算机图形学和着色器编程中,矢量运算是核心的数学工具之一。矢量用于描述空间中的位置、方向、速度等各种物理量,并在图形变换、光照计算、纹理映射等方面起着至关重要的作用。本篇文章将详细讲解矢量和标量之间的乘法与除法、矢量的加法与减法、矢量的模与单位矢量、点积…

2024_12_20_生活记录

年底了,提前祝各位朋友们新年快乐!我将近两年没动笔写blog了,主要确实挺忙。。。今天想简单聊聊自己的近期想法,一方面是职业规划,一方面是生信,最后是个人感悟。 职业规划 熟悉我的朋友们会了解我之前一直…

计算机视觉中的特征提取算法

摘要: 本文聚焦于计算机视觉中的特征提取算法,深入探讨尺度不变特征变换(SIFT)算法。详细阐述 SIFT 算法的原理,包括尺度空间构建、关键点检测、方向分配与特征描述子生成等核心步骤。通过 C#、Python 和 C 三种编程语…

Php8.X的版本中安装Sphinx扩展支持的记录

Php技术现在感觉越来越没落了,我也很久没有再接触使用过PHP,今天有一个很多年前的项目发现在使用 sphinx ,而最新的升级后发现新的 php8版本的docker 容器镜像中没有安装 sphinx 扩展,导致搜索功能不可用,个人又总是看…

DL作业11 LSTM

习题6-4 推导LSTM网络中参数的梯度, 并分析其避免梯度消失的效果 LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN),旨在解决普通 RNN 在处理长序列时遇到的梯度消失和梯度爆炸问题。它通过设计多个门…

spark 分布式 原理

Apache Spark 是一个快速且通用的大数据处理引擎,它支持分布式计算。Spark 的设计旨在通过高效的内存内计算和对多种数据源的支持来简化大规模数据集的处理。以下是关于 Spark 分布式原理的详细介绍: 1. 架构概述 Driver Program(驱动程序&…

洛谷【贪心算法】P1803 学习笔记

2024-12-20 - 第 41 篇 洛谷贪心算法题单 - 贪心算法 - 学习笔记 作者(Author): 郑龙浩 / 仟濹(CSND账号名) P1803 凌乱的yyy / 线段覆盖 题目背景 快 noip 了,yyy 很紧张! 题目描述 现在各大 oj 上有 n n n 个比赛,每个比赛的开始、结…

<mutex>注释 11:重新思考与猜测、补充锁的睡眠与唤醒机制,结合 linux0.11 操作系统代码的辅助(上)

(46)问题的起源: 因为上面的内核代码,我们编写多线程代码时,对手里的家伙事不那么自信。但我们知道,多线程在竞争锁时,若得不到锁,会进入睡眠,并会在被唤醒后重新尝试得…