第二章 网站建设,一页网站,豌豆荚app下载,项目网源码二进制数转字符串。给定一个介于0和1之间的实数#xff08;如0.72#xff09;#xff0c;类型为double#xff0c;打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示#xff0c;则打印“ERROR”。示例1:输入#xff1a;0.625输出#xff1a;0.10…二进制数转字符串。给定一个介于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:mapdouble,stringm;void dfs(double n,double su,string s){if(s.length()8){return;}m[sun*0.5]s1;dfs(n*0.5,sun*0.5,s1);dfs(n*0.5,su,s0);}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 i0;int n;string s0.;while(i7 and num!0){num*2;int tempnumnum;schar(tempnum48);numnum-tempnum;i;}if(i7){return ERROR;}return s;}
};