您的位置:首页 > 其它

LintCode : 二进制表示

2016-12-03 14:59 357 查看


 二进制表示

 描述
 笔记
 数据
 评测

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


您在真实的面试中是否遇到过这个题? 

Yes

样例

n = 
"3.72"
, 返回 
"ERROR"
.
n = 
"3.5"
, 返回 
"11.1"
.

标签 

相关题目 

很明显就是将整数小数部分拆分,然后分别求出2进制
整数部分2进制:%2,向右移动一位循环
小数部分2进制:和1比较,向左移动一位
public class Solution {
/**
* @param n:
*            Given a decimal number that is passed in as a string
* @return: A string
*/
public String binaryRepresentation(String n) {
// write your code here
String result = "";
if (n == null || n.length() == 0) {
return result;
}
String spilt[] = n.split("\\.");
if (spilt.length == 1) {
result = binaryInteger(new Integer(spilt[0]));
} else if (spilt.length == 2) {
String floatBinary = binaryFloat(new Double("0." + spilt[1]));
if (floatBinary.equals("ERROR")) {
result = "ERROR";
} else if ("".equals(floatBinary) || "0".equals(floatBinary)) {
result = binaryInteger(new Integer(spilt[0]));
} else {
result = binaryInteger(new Integer(spilt[0])) + "." + floatBinary;
}
}
return result;
}

public String binaryInteger(Integer num) {
String result = "";
if (num <= 0) {
result = "0";
return result;
}
while (num > 0) {
result = num % 2 + result;
num = num / 2;
}
return result;
}

public String binaryFloat(double num) {
String result = "";
if (num >= 1 || num < 0) {
return result;
}
if (num == 0) {
result = "0";
return result;
}
while (num>0) {
if (result.length() > 32) {
result = "ERROR";
break;
}
num = num * 2;
if (num >= 1) {
result += "1";
num -= 1;
} else {
result += "0";
}
}
return result;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二进制 LintCode