带十进制bignum的除法算法

时间:2015-01-14 12:48:50

标签: algorithm

编辑:我将我的bignum课程改为使用std::bitset并且我刚刚实施了长期分工。我只是不知道任何存储位的类。 (如std::bitset

我正在使用std::string创建一个bignum类,以使用十进制字符作为内部表示。我尝试用简单的算法实现除法:

while N ≥ D do N := N - D end return N

当然它很慢。我尝试实现长除法,但这对十进制字符来说太难了。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试找到表单的最高值,而不是经常减去D. D ^ 2n和sub这个。然后用剩余的值重复该步骤,直到剩余的值小于D.

<强>伪代码

0 result=0
1 powerOfD = D
2 while (powerOfD*powerOfD<N)
3   powerOfD=powerOfD*powerOfD
4 result = result+powerOfD/D, N=N-powerOfD;
5 if(N>D) 
6   goto 1
7 return result

实施例31/3(N = 31,D = 3)

0 result=0
1 powerD = 3;
2 3*3 < 31   TRUE
3   powerOfD= 3*3;
2 9*9 < 31   FALSE
4 result=0+9/3; N=31 - 9
5 22> 3   TRUE
6   goto 1
1 powerD = 3
2 3*3 < 22  TRUE
3   powerOfD= 3*3;
2 9*9 < 31   FALSE
4 result=3+9/3; N=22 - 9
5 13> 3   TRUE
6   goto 1
1 powerD = 3
2 3*3 < 13  TRUE
3   powerOfD= 3*3;
2 9*9 < 31   FALSE
4 result=6+9/3; N=13 - 9
5 4> 3   TRUE
6   goto 1
1 powerD = 3
2 3*3 < 4 ALSE
4 result=9+3/3; N=4-3
5 1> 3   FALSE
7 return 10