zoukankan      html  css  js  c++  java
  • Lintcode: Binary Representation

    Given a (decimal - e g  3.72) number that is passed in as a string,return the binary representation that is passed in as a string.If the number can not be represented accurately in binary, print “ERROR”
    
    Example
    n = 3.72, return ERROR
    
    n = 3.5, return 11.1

    For int part, similar approach of extracting numbers from int:

    1. use %2 to get each digit from lowest bit to highest bit.

    2. int right shift 1 position (=>>1).

    3. construct the binary number (always add to the higher position of the current binary number)

    Please refer to the code below for the process above.

    For decimal part, use *2 approach.  For example:

    int n = 0.75

    n*2 = 1.5

    Therefore, the first digit of binary number after '.' is 1 (i.e. 0.1).  After constructed the first digit, n= n*2-1 

     1 public class Solution {
     2     /**
     3      *@param n: Given a decimal number that is passed in as a string
     4      *@return: A string
     5      */
     6     public String binaryRepresentation(String n) {
     7         int intPart = Integer.parseInt(n.substring(0, n.indexOf('.')));
     8         double decPart = Double.parseDouble(n.substring(n.indexOf('.')));
     9         String intstr = "";
    10         String decstr = "";
    11         
    12         if (intPart == 0) intstr += '0';
    13         while (intPart > 0) {
    14             int c = intPart % 2;
    15             intstr = c + intstr;
    16             intPart = intPart / 2;
    17         }
    18        
    19         while (decPart > 0.0) {
    20             if (decstr.length() > 32) return "ERROR";
    21             double r = decPart * 2;
    22             if (r >= 1.0) {
    23                 decstr += '1';
    24                 decPart = r - 1.0;
    25             }
    26             else {
    27                 decstr += '0';
    28                 decPart = r;
    29             }
    30         }
    31         return decstr.length() > 0? intstr + "." + decstr : intstr;
    32     }
    33 }

    这道题还有一些细节要处理,我之前忽略了

    比如:

    Input
     
    0.5
    
    Output
     
    .1
    
    Expected
     
    0.1
    

    Input
     
    1.0
    
    Output
     
    1.
    
    Expected
     
    1
  • 相关阅读:
    flask_日期和时间
    使用SQLAlchemy对博客文章进行分页
    P2725 邮票 Stamps
    P2679 子串
    P3396 哈希冲突
    P1754 球迷购票问题
    P1504 积木城堡
    P1244 青蛙过河
    CSP-S 2019 考试分析
    2019.11.11 模拟赛 T2 乘积求和
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/4273813.html
Copyright © 2011-2022 走看看