给定一个数将其转换为二进制(均用字符串表示),如果这个数的小数部分不能在 32 个字符之内来精确地表示,则返回 "ERROR"
。
样例
n = "3.72"
, 返回 "ERROR"
.
n = "3.5"
, 返回 "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 intPart = atoi(n.c_str());
double decPart = atof(n.c_str());
decPart -= intPart;
string intStr;
string decStr;
if (intPart == 0)
{
intStr += '0';
}
while (intPart > 0)
{
int c = intPart % 2;
intStr = (char)(c+'0') + intStr;
intPart /= 2;
}
while (decPart > 0.0)
{
if (decStr.length() > 32)
{
return "ERROR";
}
double r = decPart * 2;
if (r >= 1.0)
{
decStr += '1';
decPart = r - 1.0;
}
else
{
decStr += '0';
decPart = r;
}
}
return decStr.length() > 0? intStr + "." + decStr : intStr;
}
};