LintCode 二进制表示
2015-12-25 21:12
447 查看
LintCode 二进制表示
给定一个数将其转换为二进制(均用字符串表示),如果这个数的小数部分不能在 32 个字符之内来精确地表示,则返回 “ERROR”。样例
n = “3.72”, 返回 “ERROR”.
n = “3.5”, 返回 “11.1”.
题目很简单,直接上代码吧
public class BinaryRepresention { /** * 计算n的二进制表示 * @param n n * @return n的二进制表示 */ private static String getIntBin(int n) { //Integer.toBinaryString(n) StringBuilder res = new StringBuilder(); if (n == 0) return "0"; while(n != 0) { res.append(n%2); n /= 2; } return res.reverse().toString(); } /** * 计算小数部分的二进制表示 * @param d 要计算的小数 * @return 二进制 */ private static String getDoubleBin(double d) { StringBuilder res = new StringBuilder(); if (d == 0) return "0"; while (d != 0.0) { if (res.length() > 32) return "ERROR"; double ans = d * 2; int tmp = (int)ans; res.append(tmp); d = ans - tmp; } return res.toString(); } public static String binaryRepresentation(String str) { if (str.length() == 0) return "ERROR"; int inter = 0; double d = 0; int index = str.indexOf('.'); if (index != -1) { //存在小数 inter = Integer.parseInt(str.substring(0, index)); d = Double.parseDouble(str.substring(index)); } else { inter = Integer.parseInt(str); } StringBuilder res = new StringBuilder(); res.append(getIntBin(inter)); //res.append("."); if (d == 0) return res.toString(); res.append("."); String tmp = getDoubleBin(d); if (tmp.equals("ERROR")) return tmp; return res.append(tmp).toString(); } public static void main(String [] args) { System.out.println(binaryRepresentation("6.125")); } }
相关文章推荐
- 安卓学习记录-java-day8
- 最大全1子矩阵
- 最大全1子矩阵
- B2N给互联网商业模式注入新活力
- OpenSwitch 抢了Linux++的风头
- 开发Nagios监控passwd文件插件
- 输入日期求这一天是本年中的第几天
- 软件測试基本方法(六)之集成測试和系统測试
- POJ 1426 Find The Multiple (寻找倍数)
- 进销存、内容管理、网站建设、物流相关系统
- JDBC获取表的主键
- JS判断终端设备跳转PC端、移动端相应的URL
- 最近的一些书单
- 4000 使用RNCachingURLProtocol对WebView进行本地缓存
- 6.Linux常用命令2
- Android之完美退出方法(2.1-2.2-2.3SDK版本测试通过)
- 如何在KEIL下制作出自己的库文件
- 欢迎使用CSDN-markdown编辑器
- 3226: [Sdoi2008]校门外的区间
- 每天一个Linux之rmdir命令