评测结果是这个。
ms都没错,输出结尾的空行我也留意了。
代码如下:
program masons;
var p:longint;
a,b:array[1..501]of longint;
procedure init;
begin
readln(p);
end;
procedure two(x:longint);
var l,i,j:integer;
begin
if x=1 then begin a[1]:=2; exit; end;
two(x div 2);
fillchar(b,sizeof(b),0);
l:=500;
while a[l]=0 do dec(l);
for i:=1 to l do
begin
for j:=1 to l do
inc(b[i+j-1],a[i]*a[j]);
j:=1;
while j<=500 do
begin
inc(b[j+1],b[j] div 10);
b[j]:=b[j] mod 10;
inc(j);
end;
end;
if x mod 2=1 then
begin
l:=500;
while b[l]=0 do dec(l);
for i:=1 to l do
inc(b[i],b[i]);
i:=1;
for i:=1 to l do
begin
inc(b[i+1],b[i] div 10);
b[i]:=b[i] mod 10;
end;
end;
a:=b;
end;
procedure outs;
var i:integer;
begin
writeln(trunc(p*ln(2)/ln(10))+1);
dec(a[1]);
for i:=500 downto 2 do
begin
write(a[i]);
if (i-1) mod 50=0 then writeln;
end;
write(a[1]);
end;
begin
init;
two(p);
outs;
end.