高精度除法

5.高精度除以低精度
procedure devide(a:hp;b:longint; var c:hp; var d:longint);
  {c:=a div b; d:= a mod b}
  var i,len:integer;
  begin
    fillchar(c,sizeof(c),0);
    len:=a[0]; d:=0;
    for i:=len downto 1 do begin
      d:=d*10+a[i];
      c[i]:=d div b;
      d:=d mod b;
    end;
    while (len>1) and (c[len]=0) then dec(len);
    c[0]:=len;
  end;
6.高精度除以高精度
procedure high_devide(a,b:hp; var c,d:hp);
  var
    i,len:integer;
  begin
    fillchar(c,sizeof(c),0);
    fillchar(d,sizeof(d),0);
    len:=a[0];d[0]:=1;
    for i:=len downto 1 do begin
      multiply(d,10,d);
      d[1]:=a[i];
      while(compare(d,b)>=0) do {即d>=b}
      begin
        Subtract(d,b,d);
        inc(c[i]);
      end;
    end;
    while(len>1)and(c.s[len]=0) do dec(len);
    c.len:=len;
  end;
 
 

你可能感兴趣的:(高精度除法)