讨论 / 保证AC的答案
xtc820 2014-07-26 02:08:01
点我顶贴 收藏 删除
type

arr=array[1..503] of integer;

var

n,sum,i,j:longint;

a:arr;

function p(n:longint):arr;

var

i,j,k,l,max:longint;

b,c:arr;

begin

fillchar(p,sizeof(p),0);

if n=0 then begin p[1]:=1; exit; end;

fillchar(c,sizeof(c),0);

b:=p(n div 2);

max:=-1;

for i:=500 downto 1 do if b[i]>0 then begin k:=i; break; end;

for i:=1 to k do

begin

for j:=1 to k do

if i+j-1<=500

then

begin

c[i+j-1]:=c[i+j-1]+b[i]*b[j];

l:=i+j-1;

while (l<=500) and (c[l]>=10) do

begin

c[l+1]:=c[l+1]+(c[l] div 10);

c[l]:=c[l] mod 10;

inc(l);

end;

if max<l then max:=l;

end

else break;

end;

if n mod 2=1 then

begin

for i:=1 to max do c[i]:=2*c[i];

for i:=1 to max do

if c[i]>=10 then

begin

c[i+1]:=c[i+1]+(c[i] div 10);

c[i]:=c[i] mod 10;

end;

end;

p:=c;

end;

begin

read(n);

writeln(trunc(ln(2)/ln(10)*n)+1);

a:=p(n);

sum:=1;

a[1]:=a[1]-1;

while a[sum]<0 do begin dec(a[sum+1]); a[sum]:=9; inc(sum);end;

for i:=500 downto 1 do write(a[i]);

writeln;

end.

#1 ScarletFirebolt6056@2014-07-26 02:22:50
回复 删除
???????????????????????????????????????????????????????????????????????????????????????????????????????????
查看更多回复
提交回复