fengcq1129

题目描述

有一个介于0和1之间的实数,类型为double,返回它的二进制表示。如果该数字无法精确地用32位以内的二进制表示,返回“Error”。

给定一个double num,表示0到1的实数,请返回一个string,代表该数的二进制表示或者“Error”。

测试样例:
0.625
返回:0.101

分析:将小数转化为二进制的方法:将小数乘以2顺序存储结果的整数部分,并继续将小数部分乘以2.....依次操作 知道达到所需的精度或结果为零
class BinDecimal {
public:
    string printBin(double num) {
/*        string str = {\'0\',\'.\'};
        string sError ={"Error"};
        int i;
        for(i = 0; i < 32; i++) {
            int a = (int)(num * 2);
            if (num * 2 - a != 0)
                if (a == 1)
                 str[i+2] = \'1\';
                else
                 str[i] = \'0\';
            else
                break;
        }
        if (i < 32)
            return str;
        else
            return sError;
            */
        string str = "0.";
        while(num > 0) {
            if(str.size() >= 32)
                return "Error";
            num *= 2;
            if(num >= 1) {
                str += \'1\';
                num -= 1;
            }
            else
             str +=\'0\';
        }
        return str;
    }
};

分类:

技术点:

相关文章:

  • 2022-01-02
  • 2021-11-13
  • 2021-11-13
  • 2022-01-02
  • 2021-12-14
  • 2021-12-02
猜你喜欢
  • 2021-12-02
  • 2021-12-02
  • 2021-11-28
相关资源
相似解决方案