高精度加法 PAS

来源:百度知道 编辑:UC知道 时间:2024/05/23 12:47:25
哪位大牛能不能告诉我10000进制的高精加怎么写啊。
要完整的可运行的程序,
谢谢。要pascal的。

program xu_1;
var
n1,n2:string;
a,b,c:array[1..1000] of integer;
x,l1,l2,i,j,k,l,l3:integer;
begin
readln(n1);
l1:=length(n1);
for i:=1 to l1 do
a[l1-i+1]:=ord(n1[i])-ord('0');
l2:=length(n2);
for i:=1 to l2 do
b[l2-i+1]:=ord(n2[i])-ord('0');
i:=1;
while (i<=l1) or (i<=l2) do
begin
x:=a[i]+b[i]+x div 10;
c[i]:=x mod 10;
inc(i);
end;

用整数数组每一个元素表示一个十进制整数的方法存在的缺点是:如果十进制的位数很多,则对应的数组的长度会很长,并增加了高精度计算的时间。
如果用一个元素记录2位数字、3位数字或更多位数字,则数组的长度可以明显缩小,但是还要考虑数的取值范围问题,必须保证程序运行过程中不越界。在权衡了两方面的情况后得出:用一个longint记录4位数字是最佳的方案。那么这个数组就相当于一个10000进制的数,其中每一个元素都是10000进制下的一位数。

一、数据类型定义:

type
numtype=array[1..10000] of longint; {可以存储40000位十进制数}
var
a,n:numtype;
la,ln:byte;
s:ansistring; {任意长度的字符串类型}

二、整数数组的建立和输出

readln(s);
k:=length(s);
for i:=1 to k do