讨论 / 为什么我总是WA!!!!!!!!疯了!!!!
okbeng 2010-07-23 04:59:00
点我顶贴 收藏 删除
var n,i,j,x:longint;c,b,a:array[1..500] of 0..9;lena,lenb,lenc:integer;

procedure mul;

begin

for i:=1 to lena do

begin

x:=0;

for j:=1 to lenb do

begin

x:=a[i]*b[j]+x div 10+c[i+j-1];

c[i+j-1]:=x mod 10;

end;

c[i+j]:=x div 10 ;

end;

lenc:=i+j;

while (lenc>1) and (c[lenc]=0) do dec(lenc);

if lenc>500 then lenc:=500;

lena:=lenc;a:=c;fillchar(c,sizeof(c),0);

end;

procedure di(n:integer);

begin

if n=0 then exit;

if odd(n) then

begin di(N div 2);b:=a;lenb:=lena;mul;

fillchar(b,sizeof(b),0);b[1]:=2;lenb:=1;mul;

end

else

begin di(N div 2);b:=a;lenb:=lena;mul;end ;

end;

begin

readln(n);

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

fillchar(a,sizeof(a),0);lena:=1;

a[1]:=1;

di(n);

dec(a[1]);

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

end.

#1 苍蝇@2009-04-06 02:38:00
回复 删除
me,too!!!同病相怜
#2 timetobehardworking@2009-05-09 21:01:00
回复 删除
给你我的。

program p54;

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.

#3 noip2012@2010-07-23 04:59:00
回复 删除
di过程中当n=0时不能直接退出,要把b[1]赋为1

查看更多回复
提交回复