[问题描述] 在进行正整数的除法运算时,可以通过减法来实现。
例如x?y=Q..R(Q:商,R:余数)可通过下列的方式实现:
q:=0; r:=x;
while r>=y do begin r:=r-y; q:=q+1 end;
结果,商在q中,余数在r中。
[算法说明] 上面的算法有一个缺点,就是当x比较大、y比较小时,则运算的次数非常多,速度太慢。为提高速度,下面给出改进的算法:先找一个非常接近x的数w,且满足:w=y?2k,y?2 k-1<=x<w,然后通过减法与移位的运算,以较少的运算次数完成除法。
[程序清单]
program exp3(input,output)
var x,y,w,r,q:integer;
Begin
readln(x);
r:=x;
W:=Y
while w<=r do W:=W+W
q:=0;
while W>Y do
begin
w:=w div 2;
Q:=Q+Q
if r>=w then begin
Q:=Q+1 ;
R:= R-W ;
end;
end;
writeln(q, ‘…’, R);
End.