将 bignum 解析为 16 位整数列表
我必须实现一些大数算术。该数字必须拆分为 16 位整数列表。
这不是问题所在。问题是将字符串解析为这种表示法。如果它是单个整数,我将向后遍历字符串,从字符中取出数字并添加
但是 bignum 不应该有乘法,我认为应该有一种更智能、更快的方法。 (int 乘法是 O(1);bignum 乘法不是)
怎么做?
(我不能使用像gmp这样的完整库)
I have to implement some bignum arithmetics. The number has to be split into a list of 16 bit integers.
That is not the problem. The problem is to parse a string into this notation. If it would be a single integer, i would go through the string backwards, get the number out of the char and would add <number>*10^stringposition. (last char has stringposition 1 in this example)
But the bignum should not have multiplication and I thing there should be a smarter faster way. (A int multiplication is O(1); a bignum multiplication not)
How to do it?
(I can not use a complete library like gmp)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在 Java 中,您可以使用 java.math.BigInteger 类来解决问题。
从字符串输入创建一个 BigInteger:
BigInteger x = new BigInteger(s);
获取包含此 BigInteger 的补码表示形式的字节数组:
byte[] b = x.toByteArray();
将字节数组转换为 int[],将连续的 8 位值对合并为 16 位值,如下所示:
<块引用>
In Java you can solve your problem using
java.math.BigInteger
class.Create a BigInteger from your String input:
BigInteger x = new BigInteger(s);
Get a byte array containing the two's-complement representation of this BigInteger:
byte[] b = x.toByteArray();
Convert the byte array to int[] merging consecutive pairs of 8-bit values into 16-bit values like this:
我认为没有一个好的方法可以做到这一点,因为内部表示实际上是 2^16 基数。您需要将基于 10 的数字转换为基于 2^16 的数字。
不要使用 x*10^(位置 x),因为在 2^16 基数中没有 10^n 的表示形式。你可以做类似的事情
I don't think there's a good way to do this as the internal representation actually 2^16 base. You need to convert a 10 based number into a 2^16 based number.
don't use x*10^(position x), because you don't have the representation of 10^n in 2^16 base. You can do something like