高精度

高精度代码

加法

procedure add(a,b,c:arr);
var i,x,len:longint;
begin
  len:=max(a[0],b[0]);x:=0;
  for i:=1 to len+1 do
    begin
      c[i]:=a[i]+b[i]+x;
      x:=c[i] div 10;
      c[i]:=c[i] mod 10;
    end;
  if c[len+1]>0 then len:=len+1;
end;

减法

procedure minu(var a,b,c:arr);  
var i:longint;  
begin  
  fillchar(c,sizeof(c),0);  
  for i:=1 to a[0] do  
   begin  
     if a[i]<b[i] then  
      begin  
        a[i]:=a[i]+10; a[i+1]:=a[i+1]-1;  
      end;  
     c[i]:=a[i]-b[i];  
   end;  
  c[0]:=a[0];  
  while (c[c[0]]=0)and(c[0]>1) do dec(c[0]);  
end;  


乘法

procedure mul(var a,b,d:arr);    
var i,j,x:longint;    
begin    
  fillchar(v,sizeof(v),0);    
  for i:=1 to a[0] do    
   begin x:=0;    
   for j:=1 to b[0] do    
   begin    
     v[i+j-1]:=a[i]*b[j]+x+v[i+j-1];    
     x:=v[i+j-1] div 10;    
     v[i+j-1]:=v[i+j-1] mod 10;    
   end;    
   v[i+j]:=x;    
  end;    
  v[0]:=a[0]+b[0];    
  while (v[v[0]]=0)and(v[0]>1) do dec(v[0]);    
  d:=v;    
end;    

除法
function compare(var a,b:arr):boolean;    
var i:longint;    
begin    
  if a[0]>b[0] then exit(true) else if a[0]<b[0] then exit(false);    
  if a[0]=b[0] then    
   begin    
     for i:=a[0] downto 1 do    
      if a[i]>b[i] then exit(true) else if a[i]<b[i] then exit(false);    
   end;    
end;    
procedure worked(var a,b,c:arr);    
var    
  i,j,x:longint;    
begin    
  x:=0;    
  fillchar(c,sizeof(c),0);    
  fillchar(d,sizeof(d),0);    
  d[1]:=0; d[0]:=1;    
  w[1]:=0; w[2]:=1; w[0]:=2;    
  for i:=a[0] downto 1 do    
   begin    
     mul(d,w,d);    
     d[1]:=a[i];    
     while compare(d,b)=true do    
      begin    
        minu(d,b,d);    
        inc(c[i]);    
      end;    
   end;    
  c[0]:=a[0];    
  while (c[c[0]]=0)and(c[0]>1) do dec(c[0]);    
end;    




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值