【发布时间】:2014-07-04 18:41:46
【问题描述】:
我有一个 100 位数字存储为字符串。我想用小于 10 的整数除这个数。如何有效地将存储为字符串的大整数除以整数?
【问题讨论】:
-
两种可能的(最明显的,众多的)方式。 (1):使用 BigInt 库。 (2):在代码中实现你在三年级或四年级学到的速记除法算法。
-
感谢@DavidO,但是对于如此大的整数,速写除法运行非常缓慢。我该如何克服它?
-
是的,这并不奇怪。如果这是一个学习练习,我会推荐“选项 2”,但它可能会很慢。如果是用于实际使用,我会推荐“选项 1”,因为它速度快、经过良好测试并且有据可查。
-
一种方法,仅用于学习:将数字转换为基数 N,其中 N 是您要与之相除的数字;右移一位;转换回原来的基数 10。转换成基数 N 涉及基数 N 的加法和乘法。好吧,它可能不是“有效的”。只是在我看来,它似乎是 O(n^2),二次时间。但很适合学习。
-
长除法的工作原理与您的数字所代表的基数无关。由于您想要一个可以将字符串转换为没有开销的基数,因此您只关心 10 次方的基数,并适合您的机器的原始整数大小。因此,假设一台 32 位机器,您可以以 10^8 为基数进行普通除法。这将导致分部数量减少 8 倍。您可以通过预先计算 10 的 8 次方来进一步加快速度。这将有助于您的编译器将 8 位数字转换为相应的数字。