pascal的高精乘高精的原程序

2025-06-28 23:05:57
推荐回答(1个)
回答1:

program mul;
const n=100;
type arrtype=array[0..n] of integer;
arrtype2=array[1..2*n] of integer;
var a,b,d:arrtype;
c:arrtype2;
g:integer;
procedure readdata(var int:arrtype);
var ch:char;
i,k:integer;
begin
writeln('input a large number:');
read(ch);
k:=0;
while ch in['0'..'9'] do
begin
inc(k);
int[k]:=ord(ch)-48;
read(ch);
end;
for i:=k downto 1 do
begin
int[n+i-k]:=int[i];
int[i]:=0;
end;
end;

procedure workout;
var j,i,s:integer;
begin
for i:=n downto 1 do
begin
g:=0;
for j:=n downto 1 do
begin
s:=a[j]*b[i]+g;
d[j]:=s mod 10;
g:=s div 10
end;
d[0]:=s;
g:=0;
for j:=n downto 0 do
begin
s:=d[j]+c[i+j]+g;
c[i+j]:=s mod 10;
g:=s div 10;
end;
end;
end;

procedure outdata(a:arrtype2);
var j:integer;
begin
j:=1;
writeln('output:');
while (a[j]=0) and (j<2*n) do j:=j+1;
while j<=2*n do
begin
write(a[j]);
inc(j);
end;
writeln;
end;
{======main program======}
begin
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0);
fillchar(d,sizeof(d),0);
readdata(a);readln;
readdata(b);writeln;
workout;
outdata(c);
end.