做除法时,每一次上商的值都在0~9,每次求得的余数连接以后的若干位得到新的被除数,继续做除法。因此,在做高精度除法时,要涉及到乘法运算和减法运算,还有移位处理。当然,为了程序简洁,可以避免高精度乘法,用0~9 次循环减法取代得到商的值。显然高精度除法相对是比较麻烦的,由于竞赛中很少涉及高精度数除以高精度数,所以,我们在这里只讨论一下高精度数除以普通整数的算法,采取的方法是按位相除法。
1 program exam4; 2 const max=200; 3 var a,c:array[1..max] of 0..9; 4 x,b:longint; 5 n1:string; 6 lena,i,j:integer; 7 begin 8 readln(n1); 9 lena:=length(n1); 10 for i:=1 to lena do a[i] := ord(n1[i]) - ord(’0’); 11 readln(b); 12 x:=0; {按位相除} 13 for i:=1 to lena do 14 begin //按位相除 15 c[i]:=(x*10+a[i]) div b; 16 x:=(x*10+a[i]) mod b; 17 end; 18 j:=1; 19 while (c[j]=0) and (j<lena) do inc(j); {去除高位的0} 20 for i:=j to lena do write(c[i]) ; 21 end.