zoukankan      html  css  js  c++  java
  • 给定一个字符串类型表示的小数,输出其二进制表示

    题目

    给定一个字符串类型(string)表示的小数,打印出它的二进制表示。 如果这个数无法精确地表示为二进制形式,输出”ERROR”。

    解答

    整数部分通过不断地对2取余然后除以2来得到其二进制表示, 或是不断地和1按位与然后除以2得到其二进制表示。 小数部分则通过不断地乘以2然后与1比较来得到其二进制表示。 小数部分转化为二进制,通过乘以2然后与1比较,大于等于1则该位为1,并且该值减去1; 否则该位为0。不断地通过这种操作最终能使该小数部分的值变为0的,即可精确表示。 否则将无法用有限的位数来表示这个小数部分。我们可以设定一个长度,比如说32, 在32位之内还无法精确地表示这个小数部分的,我们就认为它无法精确表示了。

    代码如下:

    #include <iostream>
    #include <string>
    #include <cstdlib>
    using namespace std;
    
    string print_binary(string val){
        int pos = val.find('.', 0);
        int intpart = atoi(val.substr(0, pos).c_str());
        double decpart = atof(val.substr(pos, val.length()-pos).c_str());
        string intstr = "", decstr = "";
        while(intpart > 0){
            if(intpart&1) intstr = "1" + intstr;
            else intstr = "0" + intstr;
            intpart >>= 1;
        }
        while(decpart > 0){
            if(decstr.length() > 32) return "ERROR";
            decpart *= 2;
            if(decpart >= 1){
                decstr += "1";
                decpart -= 1;
            }
            else
                decstr += "0";
        }
        return intstr + "." + decstr;
    }
    int main(){
        string val = "19.25";
        cout<<print_binary(val)<<endl;
        return 0;
    }
  • 相关阅读:
    不要给技术人员做绩效
    软件开发项目的风险
    cxgrid在当前View插入记录
    cxgrid根据单元的值设置样式
    有锐捷客户端的情况下用虚拟机照样上网
    cxgrid在内置右键菜单的后面增加菜单项
    cxgrid按条件计算合计值
    cxgrid在内置右键菜单的后面增加菜单项
    微信小程序弹窗 Mr
    虚拟环境的创建 Mr
  • 原文地址:https://www.cnblogs.com/wuchanming/p/4448660.html
Copyright © 2011-2022 走看看