哈哈,没用递归搞定了。不过注意呀,你别算1000的阶乘,否则那个数组开的不够大,会蹦叉的。
100的阶乘结果和Windows的计算器对比对了,200的阶乘也可以得到,呵呵。
挺好玩个东西。
procedure TForm1.Button1Click(Sender: TObject);
var
Result_Array: array[0..1000] of Integer;
i, j: Integer;
l_Start: Boolean;
begin
{清空}
for i := 0 to 1000do
Result_Array := 0;
Result_Array[0] := 1;
for i := 1 to 100do
{多少的阶乘100就改成多少}
begin
for j := 0 to 1000do
Result_Array[j] := Result_Array[j] * i;
{所有的都相乘,一次乘100不会超界,因为原来里面仅仅保存1位}
{进位}
for j := 0 to 1000do
begin
if Result_Array[j] >= 10 then
begin
Result_Array[j + 1] := Result_Array[j + 1] + Result_Array[j] div 10;
Result_Array[j] := Result_Array[j] mod 10;
end;
end;
end;
l_Start := False;
for i := 1000do
wnto 0do
begin
if not l_Start then
begin
if Result_Array <> 0 then
l_Start := True;
end;
if l_Start then
RichEdit1.Text := RichEdit1.Text + IntToStr(Result_Array);
end;
end;