我在大整数上建立一个C库。基本上,我正在寻找一种快速算法,将二进制表示形式中的任何整数转换为十进制形式
我看到了JDK的Biginteger.toString()
实现,但是对我来说看起来很沉重,因为可以将数字转换为任何基数(它对每个数字使用除法,在处理成千上万个数字时应该很慢)。
因此,如果您有任何需要分享的文档/知识,我将很高兴阅读。
编辑:关于我的问题的更多精度:
设P为内存地址
令N为在P处分配(并设置)的字节数
如何将地址P处由N个字节表示的整数(为了简化起见,用小尾数表示)转换为C字符串
例子:
N = 1
P =一些随机存储器地址,存储“ 00101010”
输出字符串=“ 42”
还是谢谢你的回答
BigInteger.toString方法看起来很繁重的原因是分块进行转换。
一个简单的算法将取最后一位数字,然后将整个大整数除以基数,直到没有余数为止。
一个问题是大整数除法非常昂贵,因此将数字细分为可以用常规整数除法(与BigInt除法相对)进行处理的块:
static String toDecimal(BigInteger bigInt) {
BigInteger chunker = new BigInteger(1000000000);
StringBuilder sb = new StringBuilder();
do {
int current = bigInt.mod(chunker).getInt(0);
bigInt = bigInt.div(chunker);
for (int i = 0; i < 9; i ++) {
sb.append((char) ('0' + remainder % 10));
current /= 10;
if (currnet == 0 && bigInt.signum() == 0) {
break;
}
}
} while (bigInt.signum() != 0);
return sb.reverse().toString();
}
就是说,对于固定的基数,您可以根据注释的建议,将“ double dabble”算法移植到您的需求上甚至更好:https : //en.wikipedia.org/wiki/Double_dabble
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句