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, Messages, SysUtils, Variants, Classes,
Graphics, Controls, Forms, Dialogs, StdCtrls, Grids;
type
TfmNagySzam = class(TForm)
lbNagySzam: TLabel;
btKilepes: TButton;
bt2Ad199: TButton;
ldNagySzam: TListBox;
procedure btKilepesClick(Sender: TObject);
procedure bt2Ad199Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Const MaxX=150;
MaxY=199;
var
fmNagySzam: TfmNagySzam;
SzamT: Array[0..MaxX,0..MaxY] Of Byte;
implementation
{$R *.dfm}
procedure TfmNagySzam.btKilepesClick(Sender: TObject);
begin
Close;
end;
procedure TfmNagySzam.bt2Ad199Click(Sender: TObject);
Var I, J, C: Word;
Ws: String;
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.