180. 二进制表示
给定一个数将其转换为二进制(均用字符串表示),如果这个数的小数部分不能在 32 个字符之内来精确地表示,则返回 "ERROR"。
样例
样例1
输入: "3.72"
输出: "ERROR"
样例说明: (3.72)10=(11.10111000010100011111⋯)2(3.72)_{10} = (11.10111000010100011111\cdots)_2(3.72)10=(11.10111000010100011111⋯)2 我们不能在32位以内表示它。
样例 2
输入: "3.5"
输出: "11.1"
样例说明: (3.5)10=(11.1)2(3.5)_{10}=(11.1)_2(3.5)10=(11.1)2
string binaryRepresentation(string &n) {
// write your code here
int pos = n.find(".");
int inteInt = atoi(n.substr(0,pos).c_str());
string decStr="";
string tmpStr="";
int size=0;
double decdoule=0;
if(pos>0)
{
tmpStr=n.substr(pos+1);
size = tmpStr.size();
decdoule = atof(tmpStr.c_str());
}
cout<<"inteInt="<<inteInt<<endl;
cout<<"decdoule="<<decdoule<<endl;
while(size )
{
decdoule = decdoule / 10;
size--;
}
string intStr="";
int r = inteInt / 2;
int k = inteInt % 2;
intStr.insert(0,to_string(k));
while(r)
{
inteInt = r ;
r = inteInt /2;
k = inteInt % 2;
intStr.insert(0,to_string(k));
}
int cout = 0;
printf("dd=%0.10f\n",decdoule);
while(decdoule >0 )
{
if(cout > 32)
{
return "ERROR";
}
decdoule = decdoule *2;
if(decdoule >= 1)
{
decStr.append(to_string(1));
decdoule -= 1;
// cout<<"decdoule="<<decdoule<<endl;
}
else
{
decStr.append(to_string(0));
}
cout++;
}
if(decStr.empty())
{
return intStr;
}
return intStr.append(".").append(decStr);
}