pascal问题 一个递推数列,输入n,输出f[n]; n
来源:学生作业帮助网 编辑:六六作业网 时间:2024/11/22 07:09:26
pascal问题 一个递推数列,输入n,输出f[n]; n
pascal问题 一个递推数列,输入n,输出f[n]; n<=4000000000000
F[0]=1
F[1]=1
F[n]=F[n div 2]+F[n div 3]+F[n div 5]+F[n div 7]
pascal问题 一个递推数列,输入n,输出f[n]; n
数据太大了吧……
只好用高精度了.
下面是高精度的代码:
procedure ReadData( var t :hp );
var i,len :integer; st :string;
begin
readln( st );
fillchar( t,sizeof(t),0 );
len := length( st );
for i:=len downto 1 do t[len-i+1]:=ord(st[i]) - 48;
t[0] := len;
end;
procedure plus( a,b:hp; var c:hp);
var i,len:integer; d,jw :longint;
begin
fillchar(c,sizeof(c),0);
if a[0]>b[0] then len:=a[0] else len:=b[0];
jw := 0;
for i:=1 to len do
begin
d := a[i]+b[i]+jw;
c[i] := d mod 10;
jw := d div 10;
end;
if jw>0 then begin inc(len); c[len]:=jw; end;
c[0]:=len;
end;
procedure devide(a:hp;b:integer; var c:hp; var d:integer);
{c:=a div b; d:= a mod b}
var i,len:integer;
begin
fillchar(c,sizeof(c),0);
len:=a[0]; d:=0;
for i:=len downto 1 do
begin
d:=d*10+a[i];
c[i]:=d div b;
d:=d mod b;
end;
while (len>1) and (c[len]=0) do dec(len);
c[0]:=len;
end;
procedure print( t :hp );
var i :integer;
begin
for i:=t[0] downto 1 do write( t[i] );
writeln;
end;
Readdata:读入数据
Plus:计算 c:=a+b
Devide:计算 c:=a div b,d:=a mod b
Print:打印