高精度除法

做除法时,每一次上商的值都在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.

 

posted @ 2016-02-01 20:40  ZJQCation  阅读(2306)  评论(0编辑  收藏  举报