LintCode 180-二进制表示

本人电子系,只为一学生。心喜计算机,小编以怡情。


给定一个数将其转换为二进制(均用字符串表示),如果这个数的小数部分不能在 32 个字符之内来精确地表示,则返回 “ERROR”。

样例:
n = “3.72”, 返回 “ERROR”.

n = “3.5”, 返回 “11.1”.


总结与反思:
1、要熟练掌握Double、Integer的字符串与数字转换的内置方法
2、double有精度损失,要上网查资料。


public String binaryRepresentation(String n) {
            // write your code here
  ///////////////////////////////////////
  //得到整数部分
         String temp="";
         for(int i=0;n.charAt(i)!='.';i++)
         {
             temp+=n.charAt(i);
         }
////////////////////////////////////////
//这里将十进制数字符串类型的整数变成二进制数字符串型
temp=Integer.toBinaryString(Integer.parseInt(temp));
//数据检验会提供"1.0",要求返回值为"1",而不是"1.0",下边这一步就是做这个工作
         if( Double.parseDouble(n) == (int )Double.parseDouble(n)       )
             return temp;
//////////////////////////////////////////
//取小数部分,我是用StringBuffer将整数部分置零法
        StringBuffer linshi=new StringBuffer(n);
         for(int i=0;n.charAt(i)!='.';i++)
             linshi.setCharAt(i, '0');
         double a=Double.valueOf(linshi.toString());//然后利用方法直接转换
         //为什么不用原数减整数得到小数呢?是因为double精度损失
        // 比如0.93000000.....00001显然不对
        //当然如果有其他的方法更好,我只是提供参考方法
        //////////////////////////////////
        //小数部分转二进制
        //循环32次,如果触发等于条件返回二进制数
        //没有就返回ERROR
        int count=-1;
        StringBuffer ret=new StringBuffer();
        for(int i=0;i<32;i++)
        {
            if(a-Math.pow(2, count)>=0)
            {
                ret.append("1");
                a=a-Math.pow(2, count);
            }
            else {
                ret.append("0");
            }
            if(a==0)//触发条件,例如0.5-0.5==0那么小数部分就得到了
            //返回“整数”+“.”+“小数”
                return temp+"."+ret.toString();
                count--;
        }
        ///////////////////////////////////////
         return "ERROR";
        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值