var
a,b:array[1..1000]of longint;
n,i:longint;
procedure make(n:longint);
var
i,j:longint;
begin
if n=0
then exit;
make(n div 2);
for i:=1 to 500 do
for j:=1 to 500 do
if n mod 2=0
then b[i+j-1]:=b[i+j-1]+a[i]*a[j]
else b[i+j-1]:=b[i+j-1]+a[i]*a[j]*2;
for i:=1 to 500 do
begin
a[i]:=b[i] mod 10;
b[i+1]:=b[i+1]+b[i] div 10;
end;
fillchar(b,sizeof(b),0);
end;
begin
readln(n);
writeln(trunc(n*ln(2)/ln(10))+1);
fillchar(a,sizeof(a),0);
fillchar(b,sizeof(b),0);
a[1]:=1;
make(n);
for i:=500 downto 2 do
write(a[i]);
write(a[1]-1);
readln;
readln;
end.
这个程序里的数组a和b都表示什么意思啊。
解释详细点。
谢谢啦。
program li;
type arr=array[-1..501] of integer;
var p:real;
i:longint;
d,c,a,b:arr;
function mult(a,b:arr):arr;
var i,j:longint;
c:arr;
begin
fillchar(c,sizeof(c),0);
for i:=1 to 500 do
for j:=1 to 500-i+1 do
c[i+j-1]:=c[i+j-1]+a[i]*b[j];
c[0]:=500;
for i:=1 to c[0] do
begin c[i+1]:=c[i+1]+c[i] div 10;
c[i]:=c[i] mod 10; end;
mult:=c;
end;
function digui(p:longint):arr;
begin
if p=0 then exit(b);
c:=digui(p div 2);
c:=mult(c,c);
if odd(p) then c:=mult(c,a);
exit(c);
end;
begin
readln(p);
writeln(trunc(p*ln(2)/ln(10))+1);
fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0);
fillchar(c,sizeof(c),0); fillchar(d,sizeof(d),0);
a[0]:=1;a[1]:=2; b[0]:=1;b[1]:=1;
c[0]:=1;c[1]:=1; i:=trunc(p); d:=digui(i);
for i:=500 downto 2 do write(d[i]); writeln(d[1]-1);
end.