注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

z55250825

一只蒟蒻

 
 
 

日志

 
 

【数学】【高精度大全..】  

2013-10-29 17:04:49|  分类: AC题目 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
   没事爬天梯顺便水水各种高精度....
 ========================
1..高精度加法

procedure highadd(a,b:arr;var c:arr);
var i,j:longint;
begin
  j:=a[0];if j<b[0] then j:=b[0];
  for i:=1 to j do c[i]:=0;
  for i:=1 to j do
   begin
       c[i]:=c[i]+a[i]+b[i];
       c[i+1]:=c[i+1]+(c[i] div 10);
       c[i]:=c[i] mod 10;
   end;
 j:=j+2;
while (j>0)and(c[j]=0)do dec(j);
c[0]:=j;
end;

=========================
2.高精度减法(只适用于大减小,负数的情况特判下)

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

==========================
3..高精度乘法

procedure highcheng(a,b:arr;var c:arr);
var i,j:longint;
begin
  for i:=1 to a[0]+b[0]+2 do
    c[i]:=0;
  for i:=1 to a[0] do
    for j:=1 to b[0] do
      begin
        c[i+j-1]:=c[i+j-1]+a[i]*b[j];
        c[i+j]:=c[i+j]+(c[i+j-1] div 10);
        c[i+j-1]:=c[i+j-1] mod 10;
      end;
  j:=a[0]+b[0]+1;
  while (j>0)and(c[j]=0) do dec(j);
  c[0]:=j;
end;

==========================
4.高精度除法(模拟人工除法,不试除直接减,最多减9次,包含比较两高精度数大小,高精减和人工移位)

procedure mul(var a:arr);
var i:longint;
begin
  for i:=a[0] downto 1 do
   a[i+1]:=a[i];
  a[1]:=0;
  inc(a[0]);
end;

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

function cmq(var a,b:arr):boolean;
var i:longint;
begin
  if a[0]>b[0] then exit(true);
  if b[0]>a[0] then exit(false);
  for i:=a[0] downto 1 do
   begin
     if a[i]>b[i] then exit(true);
     if b[i]>a[i] then exit(false);
   end;
  exit(true);
end;

procedure highchu(a,b:arr;var c:arr);
var i:longint;
begin
  for i:=1 to a[0] do begin c[i]:=0;d[i]:=0;end;
  for i:=a[0] downto 1 do
   begin
     mul(d);
     d[1]:=d[1]+a[i];
     while cmq(d,b) do
      begin
       highdec(d,b,d);
       inc(c[i]);
      end;
   end;
  i:=a[0];
  while (i>0)and(c[i]=0)do dec(i);
  c[0]:=i;
end;

  评论这张
 
阅读(9)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018