算法导论 31.1-13 将二进制整数转化为相应的十进制表示
2014-11-22 23:34
435 查看
31.1-13 写出一个高效算法,用于将β位二进制整数转化为相应的十进制表示。证明:如果长度至多为β的整数的乘法或除法运算所需时间为M(β),则执行二进制到十进制转换所需时间为θ(M(β)lgβ)。(提示:应用分治法,分别使用独立的递归计算结果的前段和后段)
public static int convertBin2DecQuick(byte[] bits) { if(bits.length != 32) { throw new IllegalArgumentException("Integer should be 32 bits"); } int negative = 0; if(bits[31]==1) { // negative integer negative = Integer.MIN_VALUE; // -2^31 } int decimal = convert2DecimalQuick(bits, 0, 30); decimal = negative + decimal; return decimal; } public static int convert2DecimalQuick(byte[] bits, int start, int end) { int value = 0; if(start < end) { int mid = (start+end) >>> 1; int left = convert2DecimalQuick(bits, start, mid); int right = convert2DecimalQuick(bits, mid+1, end); value = left + right; } else if(start == end) { if(bits[start] == 1) { value = 1 << start; // 2^start } } return value; } //Let (bk, bk-1,...,b1,b0) be the binary representation of integer n public static byte[] convert2Binary(int n) { byte[] b = new byte[32]; // integer is 32 bits if(n == 0) { return b; } if(n == 1) { b[0] =1; return b; } int i = 0; while(n != 0) { b[i] = (byte)( n & 1); n = n >>> 1; //move right without sign i++; } return b; }
相关文章推荐
- 输出从0到max_num中用二进制和十进制表示都是回文数的整数
- Verilog实现整数与小数部分的二进制转化为十进制
- HDU-2051 Bitset 进制转化(十进制整数向二进制整数转化)
- 求一个十进制正整数在二进制表示中的二进制数字个数
- 1.1.9 java用二进制表示十进制整数(不用Integer.toBinaryString(N)方法)
- 10--输入一个十进制的整数,转化为二进制,输出有多少个1
- 一个十进制的正整数在二进制表示中的数字个数(C实现)
- 13--3十进制转化为二进制
- 整数ip地址转化为01二进制表示...
- 二进制转化为整数(十进制)
- 计算机程序的思维逻辑 (4) - 整数的二进制表示与位运算
- 2012.6月九度第一题求整数的二进制表示中1的个数
- 转:十进制小数转化为二进制小数
- 整数的二进制表示中1的个数 【微软面试100题 第二十八题】
- IT公司100题-28-整数的二进制表示中1的个数
- Java十进制转化成二进制方法
- 把十进制转化为二进制的一种方法
- 整数A和B的二进制表示中有多少位是不同的
- C语言巧妙运用位运算十进制转化为二进制输出
- 输入一个整数,求该整数的二进制表达中有多少个1。例如输入10,由于其二进制表示为1010,有两个1,因此输出2。