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 fractional part of the number can not be represented accurately in binary with at most 32 characters, return ERROR.
Have you met this question in a real interview? Yes
Example
For n = "3.72", return "ERROR".
For n = "3.5", return "11.1".

class Solution {
public:
    /**
     *@param n: Given a decimal number that is passed in as a string
     *@return: A string
     */
    string binaryRepresentation(string n) {
        // wirte your code here
        int integer = 0;
        int pos = 0;
        int len = n.size();
        string res;
        while (pos < len && n[pos] != '.') {
            integer = integer * 10 + n[pos] - '0';
            pos++;
        }
        while (integer) {
            res.push_back((integer & 0x1) + '0');
            integer /= 2;
        }
        reverse(res.begin(), res.end());
        
        if (res.empty()) {
            res.push_back('0');
        }
        int int_part  = res.size();
        res.push_back('.');
        
        string f = n.substr(pos + 1);
        int end = f.size();
        int count = 0;
        bool zero = true;
        for (;end > 0;) {
            int carry = 0;
            for (int i = end - 1; i >= 0; i--) {
                int d = 2 * (f[i] - '0') + carry;
                f[i] = d % 10 + '0';
                carry = d / 10;
            }
            res.push_back(carry + '0');
            if (carry) {
                zero = false;
            }
            if (++count > 32) {
                return "ERROR";
            }
            while (end > 0 && f[end - 1] == '0') end--;
        }
        if (zero) {
            return res.substr(0, int_part);
        }
        return res;
    }
    
    
};

写起来有点啰嗦

posted @ 2015-09-15 00:25  卖程序的小歪  阅读(183)  评论(0编辑  收藏  举报