高精度计算

(1)高精度加法

运行的时候是倒着的,所以输出得倒着输出

a,b为两个相加的数,c为结果,应该也可以把原来的数加完的结果存在b里.

procedure add(a,b;var c);

{ a,b,c都为数组,a存储被加数,b存储加数,c存储结果 }

var i,x:integer;

begin

i:=1;

while (i<=a数组长度>0) or(i<=b数组的长度) do begin

x := a[i] + b[i] + x div 10; {i位相加并加上次的进位}

c[i] := x mod 10; {存储第i位的值}

i := i + 1; {位置指针变量}

end;

end;

(2)高精度减法

类似加法.

procedure minu (a,b;var c);

var i,x:integer;

begin

i:=1;

while (i<=a数组长度>0) or(i<=b数组的长度) do begin

x := a[i] – b[i] + 10+ x; {不考虑大小问题,先往高位借 10}

c[i] := x mod 10; {存储第i位的值}

x := x div 10 – 1; {将高位借掉的1减去}

i := i + 1; {位置指针变量}

end

end;

(3)高精度乘法

for i:=1 to lena do begin x:=0;

for j:=1 to lenb do begin {对乘数的每一位进行处理}

x := a[i]*b[j] + x div 10 + c[i+j-1]; {当前乘积+上次进位+原数}

c[i+j-1] := x mod 10;

end;

c[i+j]:= x div 10; {进位}

end;

lenc:=i+j;

while (c[lenc]=0) and (lenc>1) do dec(lenc);

(4)高精度除法,一般用不上

恩这个就不学了