16,748
社区成员
发帖
与我相关
我的任务
分享
function fib(n:Integer):Integer;
begin
if n>=1 then
result :=fib(n-1)*n
else
Result :=1;
end;
function nfib(n:Integer):Integer;
begin
if n>=10 then
Result :=nfib(n div 10)+fib(n mod 10)
else
Result :=fib(n);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i: Integer;
begin
Memo1.Lines.Clear;
for i := 1 to 1000 do
if nfib(i)=i then
Memo1.Lines.Add(IntToStr(i));
end;
end.
var
Datas , OutDatas : array of integer;
OutStringList : array of String; //显示使用
procedure ImulAll;
var
i , n , nCount : integer;
begin
n := 1;
SetLength(Datas , Trunc(SQRT(1000)));
nCount := 0;
for i:=0 to High(Datas) do begin
n := n * (i+1);
if n>1000 then Break;
Datas[i] := n;
inc(nCount);
end;
SetLength(Datas , nCount);
end;
procedure GetNeedInt;
Type
T32BitSet = 0..31;
T32BitSetOf = set of T32BitSet;
P32BitSetOf = ^T32BitSetOf;
var
n , Sum , nInc : integer;
i , D , k : integer;
S : String; //显示使用
begin
n := Length(Datas);
if n=0 then exit;
D := $FFFFFFFF SHR (32 - n);
for i:=1 to D do begin
Sum := 0;
nInc := 0;
S := ''; //显示使用
for k:=0 to n-1 do begin
if k in P32BitSetOf(@i)^ then begin
Sum := Sum + Datas[k];
inc(nInc);
S := S + IntToStr(k+1) + '! + '; //显示使用
end;
end;
if (nInc>=2) then begin
SetLength(OutDatas , Length(OutDatas)+1);
OutDatas[High(OutDatas)] := Sum;
SetLength(OutStringList , Length(OutStringList)+1); //显示使用
OutStringList[High(OutStringList)] := Copy(S , 1 , Length(S) - 2); //显示使用
end;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i : integer;
begin
ImulAll;
GetNeedInt;
for i:=0 to High(OutDatas) do
Memo2.Lines.Add(IntToStr(OutDatas[i]) + '=' + OutStringList[i]);
end;