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

十进制整数转二进制数用什么方法?网上一搜,大部分答案都是用短除法,也就是除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.rhkb.cn/news/340505.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WMS仓储管理系统高效驱动制造企业物料管理

在现代制造业的快速发展中,仓储管理作为供应链的核心环节,其效率直接影响到企业的生产力和市场竞争力。随着科技的进步,实施WMS仓储管理系统逐渐成为推动仓储管理向智能化转型的关键力量。本文将深入探讨WMS仓储管理系统如何以创新的方式驱动…

软件系统测试的定义和测试内容介绍

一、什么是软件系统测试? 软件系统测试是指对软件系统的功能、性能、可靠性、稳定性等方面进行全面检查和验证的过程。其目的是发现潜在的问题、缺陷和风险,并确保软件系统的质量和稳定性。 软件系统测试可以分为多个阶段,包括单元测试、集成测试、系…

OBS插件--Spout输入与输出

Spout是什么? Spout是用于Microsoft Windows的视频帧共享系统,它允许应用程序以类似于Mac上的Syphon的方式共享OpenGL纹理。 其主要目的是允许应用程序实时共享帧,而无需显著的性能开销。这一功能在多个领域有着广泛的应用,尤其是在实时视频…

【python】成功解决“TypeError: not enough arguments for format string”错误的全面指南

成功解决“TypeError: not enough arguments for format string”错误的全面指南 一、引言 在Python编程中,TypeError: not enough arguments for format string错误是一个常见的字符串格式化问题。这个错误通常发生在使用str.format()方法时,提供的参数…

【DMG80480T070_05WTR】文本显示、数据变量显示、基本图形显示、实时曲线功能及串口下载流程(串口屏)

这篇文章写给自己看的,要不然明天就忘完了。 首先新建一个工程,名称路径自拟。 导入一张图片,名字从00开始,图片放到本工程的DWIN_SET下面就行,后面如果没有特殊说明,生成的配置或者放入的图片全都放在该文…

三种常见的报表模板,省时又方便

前言 在业务应用和数据分析中,报表是一种常见的数据展示形式,可以帮助用户更直观地理解和解读数据。然而,每次创建和设计一款报表都需要花费大量的时间和精力。为了提高报表设计的效率,本文小编以葡萄城公司的嵌入式BI工具——Wy…

什么样的人适合成为产品经理

产品经理就好比是大楼的设计师,如果没有好的设计理念,好的洞察力,很难设计出让住户心满意足的房子。产品经理也是如此。 01要有创新思维和敏锐商业洞察力 做了很长时间的产品经理了,发现大部分产品经理基本上都是墨守成规&#…

AI写代码:我用kimi生成了一个设备节点监控网站,完美实现功能

更多精彩内容在公众号。 这一次继续用kimi来完成一个网站的初步搭建。这次是用来搭建一个节点监控网站。需求是通过输入节点Ip地址,用户名,密码得到远端节点的IP,CPU信息,内存信息,硬盘信息,网络收发包信息…

【Node】node的Events模块(事件模块)的介绍和使用

文章目录 简言EventsPassing arguments and this to listeners 向监听器传递参数Asynchronous vs. synchronous 异步和同步Handling events only once 只一次处理事件Error events 错误事件Capture rejections of promises 捕捉拒绝承诺的情况Class: EventEmitter 事件类Event:…

神经网络是什么?有什么作用?

人工智能是当前的热门科技领域,在自动驾驶、金融服务、智能家居、零售和电商、工业制造、医疗领域、教育领域、交通领域、娱乐领域、能源管理、农业、航空航天等很多领域都有越来越多的应用。 发展人工智能,离不开算力(芯片)、算…

单实例11.2.0.4迁移到11.2.0.4RAC_使用rman异机恢复

保命法则:先备份再操作,磁盘空间紧张无法备份就让满足,给自己留退路。 场景说明: 1.本文档的环境为同平台、不同版本(操作系统版本可以不同,数据库版本相同),源机器和目标机器部分…

语雀使用指南

语雀使用指南 语雀什么是语雀注册知识库新建文档新建表格 使用感受 语雀 在介绍语雀之前,首先来说一下什么是语雀? 什么是语雀 语雀的官方文档定义是这么说的:「语雀」是一个「专业的云端知识库」,孵化自 蚂蚁集团 &#xff0c…

迎七一党史知识竞赛答题怎么做

迎七一党史知识竞赛答题,不仅是对于党史知识的检验,更是对于参赛者学习态度和综合能力的考量。在参与这类竞赛时,我们需要做好充分的准备,掌握一定的答题技巧,才能取得好的成绩。 首先,我们要深入了解竞赛…

【LeetCode】38.外观数列

外观数列 题目描述: 「外观数列」是一个数位字符串序列,由递归公式定义: countAndSay(1) "1"countAndSay(n) 是 countAndSay(n-1) 的行程长度编码。 行程长度编码(RLE)是一种字符串压缩方法&#xff0c…

【python】修改目标检测的xml标签(VOC)类别名

需求: 在集成多个数据集一同训练时,可能会存在不同数据集针对同一种目标有不同的类名,可以通过python脚本修改数据内的类名映射,实现统一数据集标签名的目的。 代码: # -*- coding: utf-8 -*- # Time : 2023/9/11 1…

SOLIDWORKS教育版:提供学生所需的资源

SOLIDWORKS教育版是一款专为学生和教育工作者设计的3D CAD软件,它拥有强大的设计功能和用户友好的界面,让你轻松实现创新设计的梦想。这款软件不仅提供了丰富的教程和案例,还为学生提供了各种学习资源和支持,让你在学习的道路上不…

Python程序设计 身份证号的奥秘

第1关:判断性别 通过身份证的第17位也就是倒数第二位的数字可以辨别该身份证所属人的性别,奇数为男性,偶数为女性。 任务:输入身份证号,第17位若是偶数,输出男性,否则输出女性 如何截取字符串的一个字符 如何判断一个…

数据持久化第七课-URL重写与Ajax

数据持久化第七课-URL重写与Ajax 一.预习笔记 1.URL重写(对网页地址进行保护) 首先编写module,实现对网络地址的处理 其次就是module的配置 最后验证url重写技术 2.Ajax数据交互 编写后端响应数据 处理跨域的配置问题 运行项目得到后端响应数据的地址 编写前端ajax进行数据请…

【Python】 如何优雅地终止 Python 中的线程

基本原理 在 Python 中,线程(Thread)是一种执行并行计算的基本单位。然而,有时候我们需要在特定条件下终止一个正在运行的线程。Python 的标准库 threading 并没有提供直接终止线程的方法,因为强制终止线程可能会导致…

AC 800PEC 高性能控制系统GFD563A101 3BHE046836R0101

AC 800PEC 控制系统对于大功率整流器应用具有极快控制算法的高性能应用 –快速控制的周期时间范围为100 μs(微秒) 长期操作瞬变的循环至秒-要求专用控制设备。这就是为什么我们设计了AC 800PEC,扩展ABB著名的自动化技术来处理高速电力电子等过程的算法应用程序。 …