Binary Representation(二进制表示)

http://www.lintcode.com/en/problem/binary-representation/?rand=true

分析

小数的二进制表示法

整数部分表示成二进制相信大家都会,只要不断的对2取余,然后再将余数反转就可以。

那么小数部分表示成二进制,方法如下:

对十进制小数乘2,得到的整数部分和小数部分,整数部分既是相应的二进制数码,再用2乘小数部分(之前乘后得到新的小数部分),又得到整数和小数部分。如此不断重复,直到小数部分为0或达到精度要求为止。第一次所得到为最高位,最后一次得到为最低位如:0.25的二进制0.25*2=0.5 取整是0。0.5*2=1.0 取整是1。即0.25的二进制为 0.01 ( 第一次所得到为最高位,最后一次得到为最低位)。注意最后的精度限制。

public class Solution {
    /*
     * @param n: Given a decimal number that is passed in as a string
     * @return: A string
     */
    public String binaryRepresentation(String n) {
        // write your code here
        String[] split = n.split("\\.");
        int i = Integer.parseInt(split[0]);
        StringBuilder sb = new StringBuilder();
        while (i != 0) {
            sb.insert(0, i % 2);
            i /= 2;
        }
        if (sb.length() == 0) {
            sb.append(0);
        }
        StringBuilder sb2 = new StringBuilder();
        if (split[1] != null && split[1].length() > 0) {
            double d = Double.parseDouble("0." + split[1]);
            for (int j = 0; j <= 32; j++) {
                if (j == 32) {
                    return "ERROR";
                }
                d *= 2;
                if (d == 0) {
                    break;
                }
                if (d >= 1) {
                    sb2.append(1);
                    d -= 1;
                } else {
                    sb2.append(0);
                }
            }
        }
        if (sb2.length() > 0) {
            return sb.toString() + "." + sb2.toString();
        }
        return sb.toString();
    }
}

你可能感兴趣的:(Binary Representation(二进制表示))