std::bitset
并且我刚刚实施了长期分工。我只是不知道任何存储位的类。 (如std::bitset
)
我正在使用std::string
创建一个bignum类,以使用十进制字符作为内部表示。我尝试用简单的算法实现除法:
while N ≥ D do
N := N - D
end
return N
当然它很慢。我尝试实现长除法,但这对十进制字符来说太难了。
提前致谢。
答案 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