Chapter1: 位运算的奇技淫巧
5. 二进制表示浮点数
问题
给定一个介于0和1之间的实数(如0.625),类型为double,打印它的二进制表示(0.101,因为小数点后的二进制分别表示2^(-1), 2^(-2), 2^(-3)...)
如果该数字无法精确地用32位以内的二进制表示,则打印"ERROR"
算法
感觉这题跟位运算关系不大,就是按照用二进制表示浮点数的算法,用字符串拼接的方法进行编程
思路:将该浮点数 *2 得到一个新的数 num
,如果 num > 1
则在0.
后拼接上1
, 否则拼接上 0
, 循环直至 num==0
string binaryDouble(double num){
string s="0.";//#include<string>
while(num!=0){
num*=2;
if(num>=1){
s+="1";
num-=1;
}
else{
s+="0";
}
if(s.length()==34){
return "ERROR";
}
}
return s;
}
参考资料
[1] 二进制表示浮点数
[2] C++字符串
网友评论