给定一个字符串类型(string)表示的小数,打印出它的二进制表示。
这个题注意字符串的合法性。
不过下面的代码没有处理那种无限循环的小数,
这个题注意字符串的合法性。
不过下面的代码没有处理那种无限循环的小数,
当出现无限循环小数时,while(other>0)可能永久为true
代码:
#include <iostream>
#include <string>
std::string to_binary_string(const std::string& vNumStr)
{
std::string::size_type Pos = vNumStr.find('.');
std::string IntPart = vNumStr.substr(0, Pos);
std::string OtherPart = vNumStr.substr(Pos, vNumStr.length()-Pos);
if (IntPart != "")
{
int Num = atoi(IntPart.c_str());
IntPart = "";
while (Num)
{
if (Num&1) IntPart = "1" + IntPart;
else IntPart = "0" + IntPart;
Num >>= 1;
}
}
if (OtherPart.size() > 1)
{
int Other = atof(OtherPart.c_str());
OtherPart = "";
while (Other>0)
{
Other *= 2;
if (Other>=1)
{
OtherPart += "1";
Other -= 1;
}
else
{
OtherPart += "0";
}
}
}
return OtherPart.size() > 1 ? IntPart + OtherPart : IntPart;
}