给定一个十进制数作为输入,我们需要编写一个程序将其转换为等价的二进制数。
示例:
> 输入: 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