如何将以字符串存储的Big Decimal转换为二进制字符串
字符串形式超大十进制数转二进制字符串的实现方法
由于输入的十进制数超出常规数值类型的存储范围,我们可以通过字符串模拟十进制除法的方式完成转换,核心逻辑是反复将十进制数除以2,记录余数,最后反转余数序列得到二进制字符串。
实现步骤
- 逐位处理十进制字符串,模拟除以2的运算,得到商(作为下一轮输入)和余数(0或1)
- 收集每次的余数,由于余数是从二进制低位到高位生成的,最后反转序列得到正确的二进制字符串
- 处理特殊情况:输入为
'0'时直接返回'0',避免空结果
Python代码实现
def decimal_str_to_binary(decimal_str): if decimal_str == '0': return '0' binary_digits = [] current = decimal_str while current != '0': remainder = 0 new_current = [] # 逐位计算商和余数 for digit in current: num = remainder * 10 + int(digit) quotient_digit = num // 2 remainder = num % 2 # 跳过前导零,除非商本身为0 if new_current or quotient_digit != 0: new_current.append(str(quotient_digit)) binary_digits.append(str(remainder)) # 更新当前处理的十进制字符串 current = ''.join(new_current) if new_current else '0' # 反转余数序列得到二进制字符串 return ''.join(reversed(binary_digits))
示例验证
输入:
input_decimal = '31314232352342341239081370934702357023470' print(decimal_str_to_binary(input_decimal))
输出:
10101101110101000011001101011101101001100010100111111100001011
额外说明
- 纯字符串操作,无需依赖大数计算库,支持任意长度的十进制字符串
- 自动处理输入中的前导零,不影响最终结果
- 时间复杂度为O(n*m),其中n是十进制字符串的长度,m是二进制字符串的长度,效率适用于绝大多数场景
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

