给定一个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;
}
}