LeetCode 面试题 05.02. 二进制数转字符串

文章介绍了如何将小数转换为二进制字符串的方法,通过不断乘2取整数部分,直到结果为1。给出的C++代码实现了一个解决方案,使用一个循环来处理30次,如果未完成则输出错误。该方法适用于理解小数到二进制的转换逻辑。

LeetCode 面试题 05.02. 二进制数转字符串

原题

LeetCode 面试题 05.02. 二进制数转字符串

思路

  • 小数转二进制的规则:小数2 取整数部分,直至乘后结果刚好为1。例如:0.6252 = 1.25, 取1,小数部分的0.25继续乘以2为0.5,取0,小数部分0.5乘以2为1,停止,结果为0.101。
  • 输出的32位中包括“0.”这两位,直接用字符串变量ans存储,变量num乘后的整数进行判断,大于1的话ans直接在后拼接’1’,否则拼’0’,刚好为1就退出循环,30次循环后未输出则输出"ERROR"。

代码

class Solution {
public:
    string printBin(double num) {
        string ans = "0.";
        int i = 0;
        while (i < 30) {
            num *= 2;
            i++;
            if (num >= 1) {
                ans += '1';
                if (num == 1){
                    return ans;
                    break;
                } 
                else num -= 1;
            }
            else ans += '0';
        }
        return "ERROR";
    }
};

运行截图

在这里插入图片描述

收获

  • 小数变二进制
在不同编程语言中,二进制数换为字符串的过程有所不同,以下结合引用内容进行详细说明: ### Python 实现 Python 可以借助 `binascii` 库来实现二进制到字符串换。以下是示例代码: ```python import binascii # 假设已有一个二进制数 # 先模拟一个字符串换为二进制 s = 'hello world,this is python' s_16 = binascii.b2a_hex(s) s_10 = int(s_16, 16) s_2 = bin(s_10) # 再将二进制换回字符串 s_10 = int(s_2, 2) s_16 = '%x' % (s_10) s = binascii.a2b_hex(s_16) print(s) ``` 详细步骤如下: 1.字符串换为十六进制表示,使用 `binascii.b2a_hex()` 函数。 2. 把十六进制字符串换为十进制整数,使用 `int()` 函数。 3. 把十进制整数换为二进制字符串,使用 `bin()` 函数。 4. 把二进制字符串换回十进制整数,使用 `int()` 函数。 5. 把十进制整数换为十六进制字符串,使用 `%x` 格式化字符串。 6. 把十六进制字符串换为原始字符串,使用 `binascii.a2b_hex()` 函数 [^1]。 ### C++ 实现 在 C++ 里,若要把二进制数换为字符串,需要先把二进制数换为十进制数,再把十进制数换为字符串。下面是示例代码: ```cpp #include <iostream> #include <string> #include <bitset> int main() { std::string binaryStr = "10101001"; std::bitset<8> bits(binaryStr); unsigned long decimal = bits.to_ulong(); std::string result = std::to_string(decimal); std::cout << "二进制数 " << binaryStr << " 换为字符串: " << result << std::endl; return 0; } ``` 详细步骤如下: 1. 把二进制字符串存储在 `std::string` 类型的变量中。 2. 利用 `std::bitset` 把二进制字符串换为二进制位集合。 3. 把二进制位集合换为十进制数,使用 `to_ulong()` 方法。 4. 把十进制数换为字符串,使用 `std::to_string()` 函数。 ### Java 实现 在 Java 中,可使用 `Long.toBinaryString()` 和 `Long.parseLong()` 方法实现二进制数字符串换。示例代码如下: ```java package com.cn; public class TestT { public static char zero = "0".charAt(0); public static void main(String[] args) { String binaryStr = "00000001"; long decimal = toLong(binaryStr); String result = Long.toString(decimal); System.out.println("二进制数 " + binaryStr + " 换为字符串: " + result); } public static long toLong(String s) { long num = s.charAt(s.length() - 1) - zero; for (int i = s.length() - 1; i > 0; i--) { num += Integer.valueOf(s.charAt(i) - zero) * (2 << (s.length() - 2 - i)); } return num; } } ``` 详细步骤如下: 1. 把二进制字符串换为十进制长整型,使用自定义的 `toLong()` 方法。 2. 把十进制长整型换为字符串,使用 `Long.toString()` 方法 [^4]。 ### LeetCode 中二进制小数字符串LeetCode - 面试题 05.02 里,涉及二进制小数字符串的问题。解题思路有多种,例如: - 简单暴力法:小数点后面的二进制,`now` 首先从 0.5 开始,之后每次除以 2。接着依次判断当前数是否大于 `now`,是则答案加 1;若等于 `now` 则可直接返回;小于则答案加 0。 - 不断×2 法:不断将小数乘以 2,左进一位,依次判断是 0 还是 1 [^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值