讨论 / 请教一下这题。
timetobehardworking 2009-05-15 20:55: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.

这个程序里的数组a和b都表示什么意思啊。

解释详细点。

谢谢啦。

#1 timetobehardworking@2009-05-11 04:03:00
回复 删除
顶下。

麻烦帮忙看下啊。

#2 神算子@2009-05-11 05:43:00
回复 删除
A数组内存放当前求出的后500位数字,B是进行运算时的存放数组(因为有可能超过500位,所以另开一个)
#3 timetobehardworking@2009-05-11 06:16:00
回复 删除
还是没听懂。。

B是什么意思?

#4 小小小学生@2009-05-12 02:17:00
回复 删除
以前编的

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.

#5 timetobehardworking@2009-05-15 20:55:00
回复 删除
呵呵 明白了
查看更多回复
提交回复