码迷,mamicode.com
首页 > 其他好文 > 详细

小数的二进制表示

时间:2016-07-11 21:23:34      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:

两种方法,注意逻辑细节!

//题目描述
//
//有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。
//给定一个double num,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。
//测试样例:
//0.625
//返回:0.101


//两种方法,正向和逆向

#include <iostream>
using namespace std;
#include <string>

class BinDecimal {
public:
    string printBin(double num) {
        // write code here
        double base = 0.5;
        string str = "0.";
        while (num)
        {
            if (num>=base)
            {
                num -= base;
                str += "1";
            }
            else
            {
                str += "0";
            }
            if (str.size()>=32)
            {
                str = "Error";
                break;
            }
    //        num -= base;  逻辑错误
            base=base/2;
        }
        return str;
    }
};

class BinDecimal {
public:
    string printBin(double num) {
        // write code here
        string str = "0.";
        for (int i = 0; i < 32;i++)
        {
            num *= 2;
            if (num>=1)
            {
                str += "1";
                num -= 1.0;
            }
            else
            {
                str += "0";
            }
            if (num<=0.0)
            {
                return str;
            }
        }
        if (num>0.0)
        {
            return "Error";
        }
        return str;
    }
};

int main()
{
    double val = 0.625;
    BinDecimal b;
    cout<<b.printBin(val)<<endl;
    return 0;
}

 

小数的二进制表示

标签:

原文地址:http://www.cnblogs.com/ranjiewen/p/5661481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!