本文主要是介绍用贪心算法计算十进制数转二进制数(整数部分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
十进制整数转二进制数用什么方法?网上一搜,大部分答案都是用短除法,也就是除2反向取余法。这种方法是最基本最常用的,但是计算步骤多,还容易出错,那么还有没有其他更好的方法吗?
一、短除反向取余法
具体的步骤是不断将十进制数除以2,每次记录余数,直至商为0,然后把所有余数从下向上(反向)的顺序排列,即得到二进制数。
例如,把十进制数69转换为二进制数,结果为1000101,计算过程如图1所示。
通过观察图1,可以看出:
(1)
一般表达式为:
, (2)
十进制数转化为二进制数的结果就是把系数从到(从最高位到最低位)的排列。
如果把(1)式中的系数的项去掉,那么有
(3)
也就是把十进制数转换为二进制的过程,实际上就是把十进制数转换为若干个以2为底的幂运算之和,那么一般表达式为:
(4)
在(3)式中,,,。
也就是在十进制的69转换为二进制后,数位序号为0,2,6的项系数为1,其他项系数都为0(数位序号从右向左依次增1,最低位序号为0),如表1所示,表格中橙色项系数为1,白色项系数为0。
二进制数 | 1 | 0 | 0 | 0 | 1 | 0 | 1 |
位序号 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
位权重 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
二、贪心算法
那么如何快速求呢?本人经过研究发现,利用贪心算法的思维,可以很好的解决这个问题。
1、贪心算法简介
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,他所做出的是在某种意义上的局部最优解。
2、操作步骤
假设十进制数为,根据公式(4),用贪心算法思维进行十进制转二进制计算的步骤为:
(1)先找出中最大的那一项,并记录;
(2)把最大项的值从中减掉:
(3)跳转到步骤(1)循环计算,直到,计算结束。
例如,十进制数,计算过程为:
(1)找出69中最大的项为64,也就是,记录;
(2);
(3)找出5中最大的项为4,也就是,记录;
(4);
(5)找出1中最大的项为1,也就是,记录;
(6),计算结束;
计算的结果为:69=++=64+4+1
二进制数位序号0,2,6的项为1,其他位序号的项为0,得到结果为1000101。
对比短除法和贪心法,可以发现,贪心算法计算步骤少,准确率也较高,不容易算错,但是需要我们事先记住一些常用的的值,这样才有助于我们更快找出最大项。表2为的的值。
值 | 1 | 2 | 4 | 8 | 16 | 32 | 64 | 128 | 256 | 512 | 1024 |
(本文结束)
这篇关于用贪心算法计算十进制数转二进制数(整数部分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!