程序员面试金典--面试26之介于0和1之间的实数,类型为double,返回它的二进制表示

xiaoxiao2021-02-28  126

题目描述 有一个介于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; }

转载请注明原文地址: https://www.6miu.com/read-43711.html

最新回复(0)