题目描述
有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。
给定一个double num,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。
测试样例:
0.625
返回:0.101
思路:0.5 == 1.0 / (2) 0.25 == 1.0 / (2 * 2) 0.125 == 1.0 / (2 * 2 * 2) 我们只要遍历32位就可以了,直到num为0
#include<iostream>
using namespace std;
#include<string>
#include<math.h>
string PrintBin(double num)
{
string ret = "0." ;
for(int i = 1; i < 32; ++i)
{
double temp = ( 1.0 / pow(2,i) );
if(num >= temp)
{
num -= temp;
ret += '1';
}
else
ret += '0';
if(num >= -0.000000001 && num <= 0.0000001) //浮点数与0比较的写法
return ret;
}
ret = "Error";
return ret;
}
int main()
{
string ret = PrintBin( 0.625 );
cout << ret << endl;
cout << "hello..."<<endl;
return 0;
}