给定一个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();
}
}
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";
}
}
一直对题目中“如果该数字无法精确地用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;
}
}