lintcode_180.二进制表示

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lintcode_180.二进制表示相关的知识,希望对你有一定的参考价值。

给定一个数将其转换为二进制(均用字符串表示),如果这个数的小数部分不能在 32 个字符之内来精确地表示,则返回 "ERROR"

样例

n = "3.72", 返回 "ERROR".

n = "3.5", 返回 "11.1"

思路:

将n转化为整数部分与小数部分,分别转化成字符串形式再相加,用到

split() 字符串分割函数

bin() 整数转二进制字符串函数 2 - ‘0b10‘

class Solution:
    """
    @param: n: Given a decimal number that is passed in as a string
    @return: A string
    """
    def binaryRepresentation(self, n):
        # write your code here
        Integer,decimal = n.split(.)
        Integer = int(Integer)
        decimal = float(0.+decimal)
        
        Integer_str = str(bin(int(Integer)))[2:]
        if decimal == 0:
            return Integer_str
            
        decimal_list = []
        for i in range(32):
            decimal *= 2
            decimal_list.append(int(decimal))
            decimal -= int(decimal)
            if decimal == 0:
                break
        decimal_str = "."
        for i in decimal_list:
            decimal_str += str(i)
        
        if len(decimal_str) > 32:
            return "ERROR"
        else:
            return Integer_str + decimal_str

九章参考:

from decimal import *

class Solution:
    #@param n: Given a decimal number that is passed in as a string
    #@return: A string
    def binaryRepresentation(self, num):
        (a, b) = num.split(.)
        a = {:b}.format(int(a))
        b = self.frac_to_binary(b)
        if b is None:
            return ERROR
        elif b == ‘‘:
            return a
        else:
            return a + . + b
    
    def frac_to_binary(self, num):
        if int(num) == 0:
            return ‘‘
        if int(num) % 10 != 5:
            return None
        
        res = ‘‘
        num = Decimal(0. + str(num))
        while num:
            num *= 2
            if num >= 1:
                res += 1
                num -= 1
            else:
                res += 0
            num = num.normalize()    
            if num and str(num)[-1] != 5:
                return None
                
        return res

.format() 格式化字符串函数 

以上是关于lintcode_180.二进制表示的主要内容,如果未能解决你的问题,请参考以下文章

Lintcode365 Count 1 in Binary solution 题解

LintCode_389 判断数独是否合法

[LintCode] Mirror Numbers

lintcode 644 镜像数字

408 二进制求和

基于 OpenCV 实战:对象跟踪