zoukankan      html  css  js  c++  java
  • 小数的二进制表示

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

    //题目描述
    //
    //有一个介于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;
    }
  • 相关阅读:
    day 15 小结
    python中的数据类型以及格式化输出
    编程语言简介
    计算机简介
    堆排
    Lock锁
    JVM入门
    Java中反射调用私有方法出现NoSuchMethodException
    1248. 统计「优美子数组」
    注解
  • 原文地址:https://www.cnblogs.com/ranjiewen/p/5661481.html
Copyright © 2011-2022 走看看