首页 > 试题广场 >

二进制小数

[编程题]二进制小数
  • 热度指数:10726 时间限制:C/C++ 3秒,其他语言6秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

给定一个double num,范围是0到1的实数,若其能用32位以内的二进制表示出来则返回值string为其二进制值,若不能则返回值为“Error”。

测试样例:
0.625
返回:0.101
import java.util.*;

public class BinDecimal {
    public String printBin(double num) {
        // write code here
        if (num >= 1 || num <= 0) {
            return "Error";
        }
        double frac = 0.5;
        StringBuilder binary = new StringBuilder("0.");
        while (num != 0) {
            if (binary.length() >= 32) {
                return "Error";
            }
            if (num >= frac) {
                binary.append(1);
                num -= frac;
            } else {
                binary.append(0);
            }
            frac /= 2;
        }
        return binary.toString();
    }
}

发表于 2017-07-11 08:23:42 回复(0)
public String printBin(double num) {
       StringBuffer sb=new StringBuffer("0.");
       int count=32;
       while(num!=0.0){
           count--;
           if(count<0) return "Error";
           num=num*2;
           if(num>=1) {
               sb.append("1");
               num-=1;
           }else sb.append("0");
           
       }
       return sb.toString();
    }

发表于 2017-05-13 19:29:26 回复(0)
import java.util.*;

public class BinDecimal {
    public String printBin(double num) {
        double n = 1.0/2;
        double sum = 0;
        String s = "0.";
        for(int i = 0;i<32;i++){
            if(num > sum + n){//原数据大
                sum += n;
                s += "1";
            }
            else if(num < sum + n){//原数据小
                s += "0";
            }
            else//原数据大与求和数据相等
                return s += "1";
            n /= 2;
        }
        return "Error";
    }
}

编辑于 2017-05-11 15:05:09 回复(0)

一直对题目中“如果该数字无法精确地用32位……”这句话耿耿于怀。这里的32到底是什么呢?

public class BinDecimal {
    public String printBin(double num) {
        // write code here
        String s=new String("0.");
        int i=0;
        while(num!=0&&i<31){
            num*=2;
            i++;
            if(num>=1){
                num-=1;
                s+="1";
            }
            else{
                s+="0";
            }
        }
        if(num!=0)
            return "Error";
        return s;
    }
}
发表于 2017-05-10 18:18:39 回复(0)

十进制转二进制方法

小数和整数部分拆开分别计算。 整数部分:

StringBuilder sb = new StringBuilder();
while( num>0 ){
    int r = num%2;
    num /= 2;
    sb.append(r);
}

小数部分:

while( num>0 ){
    int r = num*2;
    if ( r>=1 ) {
        sb.append(1);
        num = r-1;
    }
    else {
        sb.append(0);
        num = r;
    }
}
发表于 2017-03-31 16:18:09 回复(0)