给定一个介于0和1之间的实数,如0.625,类型为double,打印它的二进制表示,如果该数字无法精确地用32位以内的二进制表示,则打印ERROR。
解答:整数的十进制转二进制是除以2取余留商,小数是乘2取整数位留小数位。
0.6252 = 1.25 取整数位--------1
0.252 = 0.5 取整数位--------0
0.5*2 =1.0 取整数位---------1
结果为0.101
#include<iostream>
using namespace std;
#include<string>
void double2Binary(double num)
{
string stringBuider = "0.";
while (num > 0)
{
double r = num * 2;
//消掉整数部分
if (r >= 1)
{
stringBuider += "1";
num = r - 1;
}
else
{
stringBuider += "0";
num = r;
}
int a = stringBuider.size();
int b = stringBuider.length();
if (stringBuider.size() > 34)
{
cout << "ERROR" << endl;
return;
}
}
cout << stringBuider << endl;
}
示例:
int main()
{
double2Binary(0.3);
system("pause");
return 0;
}