使用递归将十进制转换为二进制

给定一个十进制数作为输入,我们需要编写一个程序将其转换为等价的二进制数。

示例:

> 输入: d = 7

> 输出: 111

> 解释: 20 + 21 + 22 = 1+2+4 = 7.

>

> 输入: d = 10

> 输出: 1010

> 解释: 21 + 23 = 2+8 = 10.

我们之前在文章 十进制转二进制转换程序 中讨论过迭代方法,现在,让我们专注于递归解决方案。

目录

  • 小整数递归方法 – O(log2n) 时间和 O(log2n) 空间
  • 使用字符串处理大整数的递归方法 – O(log2n) 时间和 O(log2n) 空间

小整数递归方法 – O(log2n) 时间和 O(log2n) 空间

> 该函数通过递归地将十进制数除以 2,将余数作为下一个二进制位追加,从而从右向左构建二进制表示。

例如

> 将 10 转换为二进制

>

> 1. 10 % 2 = 0,继续计算 10 / 2 = 5

> 2. 5 % 2 = 1,继续计算 5 / 2 = 2

> 3. 2 % 2 = 0,继续计算 2 / 2 = 1

> 4. 1 % 2 = 1,停止,因为 1 / 2 = 0

>

> 读取余数得到 1010 (二进制)。

C++


CODEBLOCK_591047f8

C


CODEBLOCK_9ea50ded

Java


CODEBLOCK_5b86d3c5

Python


CODEBLOCK_baeb3cb0

C#


CODEBLOCK_ea3a8066

JavaScript


CODEBLOCK_d7ae8ce1

输出

1010

使用字符串处理大整数的递归方法 – O(log2n) 时间和 O(log2n) 空间

> 先前的方法对于大于 1023 的数字会失效,因为它们的二进制表示超出了 INLINECODE1728de1d 的范围。即使使用 INLINECODEf7dd2b28 也仅限于 1048575 以内的数字。一个更好的解决方案是将二进制位存储在 bool 数组或字符串中以提高可扩展性。

C++


CODEBLOCK_c51d6331

Java


CODEBLOCK_b7283e62

Python


CODEBLOCK_d856409d

C#


CODEBLOCK_50b6c784

JavaScript


CODEBLOCK_7710c1e6

输出

100000000000000000000
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/37017.html
点赞
0.00 平均评分 (0% 分数) - 0