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

【力扣】 面试题 05.02.二进制数转字符串(超过c++100%)

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

示例1:

输入:0.625

输出:"0.101"

示例2:

输入:0.1

输出:"ERROR"

提示:0.1无法被二进制准确表示

提示:

32位包括输出中的 "0." 这两位。

题目保证输入用例的小数位数最多只有 6 位

来源:力扣(LeetCode)

链接:https://leetcode.cn/problems/bianry-number-to-string-lcci

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

笑死,看见题目下面说最多只有6位我就有了一个恶毒的方法:直接建立map字典,从1位小数算到6位小数(即从包含"0."的3位到8位),这时候就是很明显的一道dfs题目了!复习一下dfs。结果超过了100%哈哈。

class Solution {
public:map<double,string>m;void dfs(double n,double su,string s){if(s.length()>8){return;}m[su+n*0.5]=s+"1";dfs(n*0.5,su+n*0.5,s+"1");dfs(n*0.5,su,s+"0");}string printBin(double num) {dfs(1,0,"0.");if(m[num]==""){return "ERROR";}return m[num];}
};

然后看了看官方题解,学了一下小数应该怎么转进制——>移位。比如二进制,要向左移,*2即可。

这边判断放到7就可以。本来就应该只有6位,因为这个小数只有6位,放到7位方便判断error,如果到7才跳出,说明不符合要求。

忒简单了。

class Solution {
public:string printBin(double num) {int i=0;int n;string s="0.";while(i<7 and num!=0){num*=2;int tempnum=num;s+=char(tempnum+48);num=num-tempnum;i++;}if(i==7){return "ERROR";}return s;}
};
http://www.lryc.cn/news/27245.html

相关文章:

  • 软件质量保证与测试 课堂笔记
  • Costco好市多验厂百问百答
  • Nginx 通过 header 中的标识进行分发
  • 如何实现《电子签名法》要求的可靠电子签名?
  • 工程项目管理软件有哪些?这六款很好用!
  • 多看看spdk代码学习
  • 宾语从句it做形式主语的句子
  • 【C#基础】C# 文件与IO
  • 死锁相关介绍【内含哲学家就餐问题】
  • Java的Groovy执行器内存泄露(MetaSpace)问题分析与解决办法
  • 【linux】进程信号——信号的产生
  • 部署OpenStack
  • Java 运算符与类型转化
  • 《C++ Primer Plus》第18章:探讨 C++ 新标准(2)
  • QML定时器
  • 第三章 opengl之纹理
  • 【Flink】FlinkSQL中执行计划以及如何用代码看执行计划
  • 从业者必读,一篇文章轻松掌握DevOps核心概念和最佳技能实践!
  • 2023爱分析·一体化HR SaaS市场厂商评估报告:北森
  • JAVA练习67-二叉树的中序遍历
  • 【JeecgBoot-Vue3】第1节 源码下载和环境安装与启动
  • WebAPI
  • Shell命令——date的用法
  • XSS跨站脚本
  • 【强烈建议收藏:MySQL面试必问系列之慢SQL优化专题】
  • windows,liunx,java实现apk解压,去签名、重新签名,重新打包apk
  • 【Linux】进程信号
  • SpringBoot 集成Junit单元测试
  • Android开发之简单控件
  • 树状数组讲解