Nagy számok: 2 hatványai

 

Írjunk programot, mely a Delphi Int64 maximális számábrázolását meghaladó módon meg tudja határozni például kettő hatványait. Természetesen az így előállított számok a programnyelv szempontjából nem lesznek számként kezelhetők. Olyan tömbök, illetve stringek lesznek, melyeknek 0-9 karakterek az elemei. Az itt közölt megoldási kód nagyon egyszerű, elemzését bárki elvégezheti.

 

A futtatás két képernyője, rajta a 2-nek a hatványai a 0.-tól a 199.-ig:

 

 


 

A program listája:

 

unit UNagySzam;

interface

uses
  Windows, MessagesSysUtilsVariantsClasses,

  GraphicsControlsFormsDialogsStdCtrlsGrids;

type
  TfmNagySzam = class(TForm)
    lbNagySzamTLabel;
    btKilepesTButton;
    bt2Ad199: TButton;
    ldNagySzamTListBox;
    procedure btKilepesClick(SenderTObject);
    procedure bt2Ad199Click(SenderTObject);
  private
    Private declarations }
  public
    Public declarations }
  end;

Const MaxX=150;
      MaxY=199;

var
  fmNagySzamTfmNagySzam;
  SzamTArray[0..MaxX,0..MaxY] Of Byte;

implementation

{$R *.dfm}

procedure TfmNagySzam.btKilepesClick(SenderTObject);
begin
  Close;
end;

procedure TfmNagySzam.bt2Ad199Click(SenderTObject);
Var I, J, C: Word;
    WsString;
begin
  SzamT[MaxX,1]:= 1;
  ldNagySzam.Items.Add('0: 1');
  For J:= 1 To MaxY Do
  Begin
    I:= MaxX; C:= 0; Ws:= '';
    While I<>0 Do
    Begin
      SzamT[I,J+1]:= (2*SzamT[I,J]+C) Mod 10;
      Ws:= IntToStr(SzamT[I,J+1])+Ws;
      C:= (2*SzamT[I,J]+C) Div 10; Dec(I);
    End;
    While Ws[1]='0' Do Ws:= Copy(Ws,2,Length(Ws)-1);
    ldNagySzam.Items.Add(IntToStr(J)+': '+Ws);
  End;
end;

end.