当前位置: 首页 > news >正文

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

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

示例1:

 输入:0.625
 输出:"0.101"

示例2:

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

提示:

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

思路:本题目简单地二进制转换问题

十进制的小数转换为二进制的方法为 十进制小数乘2,取出整数作为二进制小数第一位,余下的小数再乘以2,取出整数作为小数第二位,如此反复,直至余下的小数为0。

例:

十进制  0.375

0.375 * 2 = 0.75  ———— 0 (0.75的整数部分为0)

0.75 * 2   = 1.5    ———— 1(1.5的整数部分为1)

0.5 * 2 = 1           ———— 1(1的整数部分为1,且没有余数)

则二进制小数位 0.011

十进制  0.675

0.625 * 2 = 1.25  ———— 1(1.25的整数部分为1)

0.25 * 2   = 0.5  ————   0(0.5的整数部分为0)

0.5 * 2 = 1           ———— 1(1的整数部分为1,且没有余数)

则二进制小数位 0.101

十进制  0.38

0.38 * 2 = 0.76   ———— 0(0.76的整数部分为0)

0.76* 2   = 1.52  ————  1(1.52的整数部分为1)

0.52* 2 = 1.04    ———— 1(1.04的整数部分为1)

0.04*2 = 0.08     ———— 0  (0.08的整数部分为0)

.......

则二进制小数位 0.0110........
 

class Solution {
public:string printBin(double num) {string str ="0.";int sum = 0;while(sum<32&&num){num*=2;sum++;if(num>=1){str.push_back('1');num-=1;} else str.push_back('0');}return sum>=32?"ERROR":str;}
};

http://www.lryc.cn/news/25725.html

相关文章:

  • MySQL数据更新操作
  • C# 封装
  • 每日学术速递3.2
  • PCBA方案设计——LCD体重电子秤方案
  • 动态规划--背包问题
  • 从0开始学python -45
  • 如何用BurpSuite抓取手机数据包
  • Linux性能监控工具iostat解析
  • 3D可视化大屏制作真的那么难?没有好用的软件解决吗?
  • C语言|文件读写,代码运行后留下“记忆”
  • 【2023unity游戏制作-mango的冒险】-6.关卡设计
  • JavaScript高级 浏览器WebStorage
  • $ 3 :类型强制转换场景、printf函数
  • 视频会议系统异常中断故障分析案例
  • 什么是文件传输中台?
  • 设计模式-代理模式(Java)
  • 如何处理负面评论?利用负面评论发挥优势
  • 一个JAVA程序员必备的技能有哪些?知道这些帮你快速升职加薪
  • DHTMLX Suite 8.0 重大发布,新增更多新主题、热图图表、辅助功能支持功能
  • [华为OD机试 ] Linux发行版的数量(C++ Java JS Python)
  • HydroD 实用教程(五)Morsion Model
  • 成功解决xshell7会话窗口只能显示一个的问题
  • Spring security 个人理解
  • 线性表 顺序表数组
  • 从WebRtc学习RTP协议
  • centos7 配置samba
  • 前端转golang从小白到实战自学笔记(2023/3/1)
  • 10个必须知道的JavaScript技巧,让你成为更好的程序员
  • 蓝桥杯真题(JAVA)--分巧克力
  • 机器学习:学习KMeans算法,了解模型创建、使用模型及模型评价