用贪心算法计算十进制数转二进制数(整数部分)

十进制整数转二进制数用什么方法?网上一搜,大部分答案都是用短除法,也就是除2反向取余法。这种方法是最基本最常用的,但是计算步骤多,还容易出错,那么还有没有其他更好的方法吗?

一、短除反向取余法

具体的步骤是不断将十进制数除以2,每次记录余数,直至商为0,然后把所有余数从下向上(反向)的顺序排列,即得到二进制数。

例如,把十进制数69转换为二进制数,结果为1000101,计算过程如图1所示。

图1 短除反向取余法

通过观察图1,可以看出:

69=1\times 2^{6}+0\times 2^{5}+0\times 2^{4}+0\times 2^{3}+1\times 2^{2}+0\times 2^{1}+1\times 2^{0}             (1)

一般表达式为:

a=\sum_{i=0}^{i=n}\left ( c_{i}\ast 2^{i} \right )c_{i}\in \left \{ 0,1 \right \}                                                (2)

十进制数转化为二进制数的结果就是把系数c_{i}i=ni=0(从最高位到最低位)的排列

如果把(1)式中的系数c_{_i}=0的项去掉,那么有

69=2^{6}+2^{2}+2^{0}                                                            (3)

也就是把十进制数转换为二进制的过程,实际上就是把十进制数转换为若干个以2为底的幂运算之和,那么一般表达式为:

a=\sum_{i=0}^{i=m}2^{n_{i}}                                                               (4)

在(3)式中,n_{0}=6n_{1}=2n_{2}=0

也就是在十进制的69转换为二进制后,数位序号为0,2,6的项系数为1,其他项系数都为0(数位序号从右向左依次增1,最低位序号为0),如表1所示,表格中橙色项系数为1,白色项系数为0。

表1 十进制数69的二进制转换结果

二进制数

1

0

0

0

1

0

1

位序号

6

5

4

3

2

1

0

位权重

64

32

16

8

4

21

二、贪心算法

那么如何快速求n_{i}呢?本人经过研究发现,利用贪心算法的思维,可以很好的解决这个问题。

1、贪心算法简介

贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。

2、操作步骤

假设十进制数为a,根据公式(4),用贪心算法思维进行十进制转二进制计算的步骤为:

(1)先找出a中最大的那一项2^{n_{i}},并记录{n_{i}}

(2)把最大项的值从a中减掉:a=a-2^{n_{i}}

(3)跳转到步骤(1)循环计算,直到a=0,计算结束。

例如,十进制数a=69,计算过程为:

(1)找出69中最大的项为64,也就是2^{6},记录n_{0}=6

(2)a=69-64=5

(3)找出5中最大的项为4,也就是2^{2},记录n_{1}=2

(4)a=5-4=1

(5)找出1中最大的项为1,也就是2^{0},记录n_{2}=0

(6)a=1-1=0,计算结束;

计算的结果为:69=2^{6}+2^{2}+2^{0}=64+4+1

二进制数位序号0,2,6的项为1,其他位序号的项为0,得到结果为1000101。

对比短除法和贪心法,可以发现,贪心算法计算步骤少,准确率也较高,不容易算错,但是需要我们事先记住一些常用的2^{n}的值,这样才有助于我们更快找出最大项。表2为0\leqslant n\leqslant 102^{n}的值。

表2 常用2为底幂的值

2^{n}2^{0}2^{1}2^{2}2^{3}2^{4}2^{5}2^{6}2^{7}2^{8}2^{9}2^{10}
12481632641282565121024

(本文结束)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/687403.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

漏洞挖掘 | 记一次信息泄露到登入后台

这次是项目上遇到的一个洞,打开页面是一个红红的登录页面 这里就不放图了,浓浓的红色气息~ 老样子抓登录包 虽然是明文传输但是爆破弱口令无果 f12大法,审计源代码,在其中一个js文件中发现了这个接口 拼接URL进行访问 感觉有点东…

热搜爆了!AI秒写3篇湖南高考作文,邀你来打分!

今天上午 全国高考语文科目结束 作文题目成为焦点 相关话题立刻冲上热搜 今年湖南高考采用的是新课标 I 卷 作文题涉及到了人工智能 引发大量网友讨论 ↓↓↓ 随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是…

Switch双系统:2024.6,自己动手丰衣足食版

文章目录 资源(追本溯源)AtmosphereHekateRekadoDBINXThemesInstallerTesla-MenuSysClkRetroArch其他常用插件 基础教程(自己动手丰衣足食版)大气层双系统教程安装插件大气层系统升级救砖和恢复官方系统版本其他不推荐使用使用Mac…

ts类型声明文件、内置声明文件

1. ts类型声明文件 在ts中以d.ts为后缀的文件就是类型声明文件,主要作用是为js模块提供类型信息支持,从而获得类型提示 1.1 第三方包用ts编写的,会自动生成一个 .d.ts文件,进行类型声明 1.2 有些包不是用ts编写的,在…

我国衡器市场规模逐渐扩大 出口量远大于进口量

我国衡器市场规模逐渐扩大 出口量远大于进口量 衡器是利用力的杠杆平衡原理或胡克定律来测定物体质量的一种仪器设备。随着生产技术逐渐进步,衡器的种类逐渐增多。根据衡量方法不同,衡器大致可分为非自动衡器、自动衡器等;根据结构原理不同&a…

策略模式+简单工厂

🍇工厂模式 🍈工厂模式向策略模式过度——工厂加一个保安 🍏策略模式 🍐策略模式简单工厂 声明本文需要理解多态的基础上才能来学习 欢迎前来学习——继承和多态 学习记录 工厂模式 需要什么就生成什么 // 工厂模式 class Fact…

2. 数据的表示和运算

2.数据的表示和运算 文章目录 2.数据的表示和运算2.1.1进位计数制r进制计数法任意进制->二进制二进制<->八进制、十六进制二进制->八进制二进制->十六进制八进制->二进制十六进制->二进制 各种进制的常见书写方式十进制->任意进制整数部分小数部分 真值…

哈默纳科Harmonic谐波减速机应用领域有哪些

在制造设备中&#xff0c;精确控制速度与位置的需求日益凸显&#xff0c;这为谐波减速机的广泛应用提供了广阔的舞台。哈默纳科Harmonic谐波减速机以结构紧凑、高精度、高刚度、高可靠性、便于安装维护等优势&#xff0c;在工业机器人和自动化系统中发挥着举足轻重的作用。 一、…

C语言—内存函数

1. memcpy 使用和模拟实现 void* memcpy&#xff08;void* destination&#xff0c;const void* source&#xff0c;size_t num&#xff09;&#xff1b; 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。这个函数在遇到 ‘\0’ 的时候并不…

使用 Scapy 库编写 ICMP 洪水攻击脚本

一、介绍 ICMP&#xff08;Internet Control Message Protocol&#xff0c;互联网控制消息协议&#xff09;洪水攻击&#xff08;ICMP Flood Attack&#xff09;是一种常见的网络攻击类型&#xff0c;旨在消耗目标系统的网络资源和带宽。这种攻击通过发送大量的ICMP消息给目标…

JAVA开发的一套(智造制造领航者云MES系统成品源码)saas云MES制造执行系统源码,全套源码,支持二次开发

JAVA开发的一套&#xff08;智造制造领航者云MES系统成品源码&#xff09;saas云MES制造执行系统源码&#xff0c;全套源码&#xff0c;支持二次开发 1990年11月&#xff0c;美国先进制造研究中心AMR&#xff08;Advanced Manufacturing Research&#xff09;就提出了MES&#…

定时器的使用和实现

目录 一.定时器Timer类的主要方法 二.定时器Timer类的使用 三.定时器的模拟实现 一.定时器Timer类的主要方法 定时器Timer类在java.util包中。 使用前先进行实例化&#xff0c;然后使用实例的schedule(TimerTask task, long delay)方法&#xff0c;设定指定的任务task在指…

跟着小白学linux的基础命令

小白学习记录&#xff1a; 前情提要&#xff1a;Linux命令基础格式!查看 lsLinux 的7种文件类型及各颜色代表含义 进入指定目录 cd查看当前工作目录 pwd创建一个新的目录(文件夹&#xff09; mkdir创建文件 touch查看文件内容 cat、more操作文件、文件夹- 复制 cp- 移动 mv- 删…

从混乱到有序:PDM系统如何优化物料编码

在现代制造业中&#xff0c;物料管理是企业运营的核心。物料编码作为物料管理的基础&#xff0c;对于确保物料的准确性、唯一性和高效性至关重要。随着产品种类的不断增加和产品变型的多样化&#xff0c;传统的物料编码管理方式已经不能满足企业的需求。本文将探讨产品数据管理…

SOLIDWORKS参数化设计插件 慧德敏学

SOLIDWORKS软件是法国达索公司的产品&#xff0c;最初是满足欧美一些工程师产品设计需要而开发的&#xff0c;并没有考虑中国的企业实际情况。我们为满足国内客户的需要&#xff0c;对SOLIDWORKS进行了二次开发&#xff0c;借助SolidKits.AutoWorks参数化工具&#xff0c;通过一…

计算机网络-OSI七层参考模型与数据封装

目录 一、网络 1、网络的定义 2、网络的分类 3、网络的作用 4、网络的数据传输方式 5、网络的数据通讯方式 二、OSI七层参考模型 1、网络参考模型定义 2、分层的意义 3、分层与功能 4、TCP\IP五层模型 三、参考模型的协议 1、物理层 2、数据链路层 3、网络层 4…

SQL面试问题集

目录 Q.左连接和右连接的区别 Q.union 和 union all的区别 1、取结果的交集 2、获取结果后的操作 Q.熟悉开窗函数吗&#xff1f;讲一下row_number和dense_rank的区别。 Q.hive行转列怎么操作的 Q.要求手写的题主要考了聚合函数和窗口函数&#xff0c;row_number()&#…

SSM旅游论坛(前后分离源码+论文)

该旅游论坛是基于Spring、SpringMVC、Mybatis框架开发出来的 用户信息管理 此页面提供给管理员的功能有&#xff1a;用户信息的查询管理&#xff0c;可以删除用户信息、修改用户信息、新增用户信息&#xff0c; 还进行了对用户名称的模糊查询的条件 景点信息管理 论坛类型管理…

走进 Apache 世界的另一扇大门

引言 作为热爱技术的你&#xff0c;是否也羡慕 Apache PMC 或者 Committer&#xff0c;此篇文章渣渣皮带你迈出如何成为技术大牛的第一步。 当然我现在还是一枚小小的 code contributor&#xff0c;在成为 committer 的路上还在奋力打码中&#xff0c;写这篇文章也是为大家有…

C# Interlocked 原子操作

目录 注解 方法 适用于 案例 1&#xff1a;Add 对两个整数进行求和并用和替换第一个整数&#xff0c;上述操作作为一个原子操作完成 2&#xff1a;Exchange Exchange(UInt32, UInt32) 以原子操作的形式&#xff0c;将 32 位无符号整数设置为指定的值并返回原始值。 参考…