力扣面试题 - 25 二进制数转字符串

题目:

二进制数转字符串。给定一个介于0和1之间的实数(如0.72),类型为double,打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示,则打印"ERROR"。

示例1:

复制代码
 输入:0.625
 输出:"0.101"

示例2:

复制代码
 输入:0.1
 输出:"ERROR"
 提示:0.1无法被二进制准确表示

提示:

  • 32位包括输出中的 "0." 这两位。
  • 题目保证输入用例的小数位数最多只有 6

思路:

  1. 首先需要知道小数点是如何转二进制的(乘2取整),不了解的同学可以看看这篇博客。小数的二进制表示-CSDN博客
  2. 那这道题应该怎么做呢?我们可以先定义一个字符数组用来存储结果。然后将num乘2,如果大于1,那么结果数组写入1,否则写入0。同时需要记录长度。
  3. 如果该数能被准确表示,那么他最后的小数部分最后会变为0。否则则是不能被准确表示。
  4. 同时,如果长度大于了32,那么他也算不能准确表示。
  5. 所有都判断完后,那么返回结果字符串,得解。

C代码如下:

cpp 复制代码
char* printBin(double num) {
    // 检查输入是否合法
    if (num <= 0 || num >= 1) {
        return "ERROR";
    }

    // 用于存储结果的静态字符数组
    static char result[34]; // 最多 32 位 + '\0'
    strcpy(result, "0.");   // 初始化为 "0."

    // 转换逻辑
    int length = 2; // 当前长度,包含 "0."
    while (num > 0) {
        // 如果长度超过 32 位,则返回 ERROR
        if (length >= 32) {
            return "ERROR";
        }

        // 计算下一位
        num *= 2;
        if (num >= 1) {
            result[length++] = '1'; // 添加 '1'
            num -= 1;               // 减去整数部分
        } else {
            result[length++] = '0'; // 添加 '0'
        }
    }

    // 添加字符串结束符
    result[length] = '\0';
    return result;
}
相关推荐
龙山云仓12 分钟前
No131:AI中国故事-对话荀子——性恶论与AI约束:礼法并用、化性起伪与算法治理
大数据·人工智能·深度学习·算法·机器学习
夏鹏今天学习了吗20 分钟前
【LeetCode热题100(90/100)】编辑距离
算法·leetcode·职场和发展
芒克芒克1 小时前
数组去重进阶:一次遍历实现最多保留指定个数重复元素(O(n)时间+O(1)空间)
数据结构·算法
星火开发设计1 小时前
二维数组:矩阵存储与多维数组的内存布局
开发语言·c++·人工智能·算法·矩阵·函数·知识
颜子鱼1 小时前
Linux驱动-INPUT子系统
linux·c语言·驱动开发
丨康有为丨1 小时前
算法时间复杂度和空间复杂度
算法
HarmonLTS2 小时前
Python人工智能深度开发:技术体系、核心实践与工程化落地
开发语言·人工智能·python·算法
a程序小傲2 小时前
京东Java面试被问:RPC调用的熔断降级和自适应限流
java·开发语言·算法·面试·职场和发展·rpc·边缘计算
一分之二~2 小时前
二叉树--层序遍历(迭代和递归)
数据结构·c++·算法·leetcode
zl_vslam2 小时前
SLAM中的非线性优-3D图优化之绝对位姿SE3约束右扰动(十七)
人工智能·算法·计算机视觉·3d