大整数除法 - Knuth 算法 D

Posted

技术标签:

【中文标题】大整数除法 - Knuth 算法 D【英文标题】:Large Integer Division - Knuth's Algorithm D 【发布时间】:2013-04-18 04:20:58 【问题描述】:

我必须使用 Knuth 算法 D(编程艺术第 2 卷)使用大整数除法将任何数字(无论大小)除以另一个数字,例如 74839234 除以 72548

我做了两个数组来表示这些数字

n[] = 7,4,8,3,9,2,3,4
d[] = 7,2,5,4,8

我试图得到这样的输出:

q[] = 1,0,3,1
r[] = 4,2,2,4,6

我真的不知道从哪里开始。任何帮助或指导将不胜感激!

【问题讨论】:

用英文说明写出你被指示使用的算法,例如你会如何告诉一个人去做。识别编程结构,如 for 循环以及其中的 if 和 while。重写为伪代码。然后,将其重写为代码。 哪种编程语言? 我在理解算法时遇到了一些问题。因此,当伪代码时,我不知道从哪里开始。我一直在玩 excel 试图弄明白。 【参考方案1】:

在 D1 你有d=1,所以设置

n[]=0,7,4,8,3,9,2,3,4

n = 5m = 3

另外,步骤D4有一个形式错误:(第二行)应该是...

minus q(hat) times (v1, v2, ..., vn)b TIMES b ** (m - j)

这里,** 表示“力量”(便于书写的 Fortran 风格)。当然,这里是b = 10,所以

times b ** (m - j) 将减数左移到合适的位置进行减法。

【讨论】:

以上是关于大整数除法 - Knuth 算法 D的主要内容,如果未能解决你的问题,请参考以下文章

C++的大数除法最快速度的算法

2737 大整数除法

试除法分解大整数

大整数的有底除法和欧几里得除法

大整数除法表示为 C++ 中的字符串

高精度_百炼_大整数除法 2737 (Python)