错排递推:f[1]=0;f[2]=1;f[i]=(i-1)*(f[i-1]+f[i-2])
注意要用单精度*高精度和高精加=。=(丧心病狂)
type
rec=array[0..410] of longint;
var
n,t,l :longint;
f :array[0..210] of rec;
i,j,k :longint;
begin
read(n);
f[1][1]:=0;f[2][1]:=1;l:=1;
for i:=3 to n do
begin
for j:=1 to l do f[i][j]:=(i-1)*(f[i-1][j]+f[i-2][j]);
for j:=1 to l do
begin
t:=k;
k:=(f[i][j]+k) div 10;
f[i][j]:=(t+f[i][j]) mod 10;
end;
while (k<>0) do
begin
inc(l);
f[i][l]:=k mod 10;
k:=k div 10;
end;
end;
for i:=l downto 1 do write(f[n][i]);writeln;
end.
——by Eirlys