中国建设银行网站结构,什么是网站建设公司,只有一个页面的网站怎么做,学校网站建设技术【LetMeFly】面试题 05.02.二进制数转字符串
力扣题目链接#xff1a;https://leetcode.cn/problems/bianry-number-to-string-lcci/
二进制数转字符串。给定一个介于0和1之间的实数#xff08;如0.72#xff09;#xff0c;类型为double#xff0c;打印它的二进制表达式…【LetMeFly】面试题 05.02.二进制数转字符串
力扣题目链接https://leetcode.cn/problems/bianry-number-to-string-lcci/
二进制数转字符串。给定一个介于0和1之间的实数如0.72类型为double打印它的二进制表达式。如果该数字无法精确地用32位以内的二进制表示则打印“ERROR”。
示例1: 输入0.625输出0.101示例2: 输入0.1输出ERROR提示0.1无法被二进制准确表示提示
32位包括输出中的 0. 这两位。题目保证输入用例的小数位数最多只有 6 位
方法一模拟乘2取余
这道题比较“便民”的是二进制长度超过32则输出ERROR。因此我们就不需要判断是否为“无限小数”了。
每次将num乘以2如果num的个位是1则将1添加到答案末尾num−1num - 1num−1否则将0添加到答案末尾。
如此往复直到num为0转换完成或答案的长度到达32强制结束转换转换失败
时间复杂度O(C)O(C)O(C)其中CCC是转换为二进制后的字符串长度。C≤31C\leq 31C≤31空间复杂度O(C)O(C)O(C)当返回ERROR时需要占据32个char大小的空间
AC代码
C
class Solution {
public:string printBin(double num) {string ans 0.;while (true) {num * 2;int thisVal num 1;ans (char)(0 thisVal);num - thisVal;if (num 0) {return ans;}if (ans.size() 32) {return ERROR;}}}
};Python
class Solution:def printBin(self, num: float) - str:ans 0.while True:num * 2thisVal num 1ans chr(ord(0) thisVal)num - thisValif num 0:return ansif len(ans) 32:return ERRORWhat’s more
本题无输入为“0”的测试样例截至当前2023.3.2 9:53在控制台输入0时得到的答案是“0.”。但其实答案为“0”比较好 同步发文于CSDN原创不易转载请附上原文链接哦~ Tisfyhttps://letmefly.blog.csdn.net/article/details/129295125