pascal超难题,高精度除高精度,谁会?教教我好吗?我这有源程序,帮我解释一下

来源:百度知道 编辑:UC知道 时间:2024/06/06 15:48:13
底下是程序,谁能帮我解释?每句都要
program gaojingduchufa;
type gj=array[0..9999] of integer;
var a,b,c:gj;
s:string;
i:integer;

function mo(s:integer):boolean;
var i:integer;
begin
if a[0]-s+1>b[0] then exit(true)
else if a[0]-s+1<b[0] then exit(false);
for i:=0 to b[0]-1 do
if a[a[0]-i]>b[b[0]-i] then exit(true)
else if a[a[0]-i]<b[b[0]-i] then exit(false);
mo:=true;
end;

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

procedure print(x:gj);
begin
for i:=x[0] downto 1 do write(x[i]);
writeln;
end;

begin
readln(s);
a[0]:=length(s);
for i:=1 to

其实是把数分解为数组后不断用被除数减除数,直到被除数小于除数为止。

没什么难的,只是判断加循环,中间取了个函数,很基本,建议您着重学习一下算法分析这门课

program gaojingduchufa;
type gj=array[0..9999] of integer;
var a,b,c:gj;
s:string;
i:integer;{设变量}

function mo(s:integer):boolean;{判断}
var i:integer;
begin
if a[0]-s+1>b[0] then exit(true)
else if a[0]-s+1<b[0] then exit(false);
for i:=0 to b[0]-1 do
if a[a[0]-i]>b[b[0]-i] then exit(true)
else if a[a[0]-i]<b[b[0]-i] then exit(false);
mo:=true;
end;

procedure minus(s:integer);{加}
var i,j:integer;
begin
j:=1;
for i:=s to s+b[0] do
begin
if a[i]<b[j] then begin dec(a[i+1]);inc(a[i],10-b[j]);end
else dec(a[i],b[j]);
inc(j);
end;
while (a[0]>0)and(a[a[0]]=0) do dec(a[0]);
if a[0]=0 then a[0]:=1;
end;

procedure print(x:gj);{输出}
begin
for i:=x[0] downto 1 do write(x[i]);
writel