![]() |
1
12
大多数语言都有这样做的函数或库,通常称为bignum库。( GMP 是好的。 如果你想自己做,我会像人们在纸上做长乘法那样做。要做到这一点,您可以使用包含数字的字符串,也可以使用二进制位操作。 例子:
或二进制的:
编辑: 在使用二进制代码之后,我意识到使用位操作而不是包含以10为基数的字符串来编码要简单得多(当然也要快得多)。我已经编辑了我的二进制乘法示例来显示一个模式:对于底部数字中的每个1位,添加顶部数字,位左移。 1位的位置 乘以一个变量。最后,该变量将包含产品。 要存储产品,您必须有两个64位数字,并设想其中一个是产品的前64位,另一个是产品的第二个64位。您必须编写代码,将第二个数字的第63位的加法运算到第一个数字的第0位。 |
![]() |
2
4
如果您不能使用现有的bignum库(如gmp),请签出 Wikipedia's article on binary multiplication with computers . 有许多好的,有效的算法。 |
![]() |
3
3
最简单的方法是使用教科书机制,将任意大小的数字分成32位的块。
给定一个b c d*e f g h(每个块32位,总共128位)
您将首先执行:h*d+out[8]=>64位结果。
然后用g,f,e重复。
最后,遍历并将大整数转换为数字(这需要一个“将大数字除以一个单词”的例程) |
![]() |
4
1
是的,您使用的数据类型实际上是一个数字字符串(就像普通的“字符串”是一个字符串一样)。你如何做到这一点是高度依赖语言的。例如,Java使用BigDeCimple。你用什么语言? |
![]() |
5
1
这通常作为家庭作业来做。你在小学学到的算法会奏效的。如果您需要一个真正的应用程序,请使用一个库(其他文章中提到了几个库)。 |
![]() |
6
0
这是我用C编写的代码。好的旧乘法方法
|
![]() |
7
0
|
![]() |
danial · 如何在多个字符串的每个位置找到最频繁的字符 2 年前 |
![]() |
Manny · 如何比较Perl中的字符串? 2 年前 |
![]() |
Diret · 获取范围内每个数字的子倍数的算法 2 年前 |
![]() |
Saif · 排序时python如何决定何时调用比较器? 2 年前 |