⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.pas

📁 一个用delphi编写的关于大数计算的程序
💻 PAS
字号:
unit Main;

interface

uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
    Dialogs, StdCtrls, Buttons;

type
    TForm1 = class(TForm)
        Label1: TLabel;
        Label2: TLabel;
        Label3: TLabel;
        Memo1: TMemo;
        Memo2: TMemo;
        Memo3: TMemo;
        BitBtn1: TBitBtn;
        procedure BitBtn1Click(Sender: TObject);
    private
        { Private declarations }
        slExp1, slExp2, slResult: TStringList;
        function MakeExp(ANum: string; ASl: TStringList): Boolean;
        function Multil(ANum1, ANum2: string): string;
    public
        { Public declarations }
        constructor Create(AOwner: TComponent); override;
        destructor Destroy; override;
    end;

var
    Form1: TForm1;

implementation

{$R *.dfm}

constructor TForm1.Create(AOwner: TComponent);
begin
    inherited Create(AOwner);
    slExp1 := TStringList.Create;
    slExp2 := TStringList.Create;
    slResult := TStringList.Create;
end;

destructor TForm1.Destroy;
begin
    slExp1.Free;
    slExp2.Free;
    slResult.Free;
    inherited;
end;

function TForm1.MakeExp(ANum: string; ASl: TStringList): Boolean;
var
    i: integer;
begin
    Result := False;
    ASl.Clear;
    for i := 1 to Length(ANum) do begin
        if (not (ANum[i] in ['0'..'9'])) then Exit;
        ASl.Add(ANum[i]);
    end;
    Result := True;
end;

function TForm1.Multil(ANum1, ANum2: string): string;
var
    i, j, nNum, nTemp: integer;
    slTmp: TStringList;
begin
    Result := '';
    if not (MakeExp(ANum1, slExp1) and MakeExp(ANum2, slExp2)) then Exit;
    slTmp := TStringList.Create;
    slResult.Clear;
    //计算乘积
    for i := slExp2.Count - 1 downto 0 do begin
        for j := slExp1.Count - 1 downto 0 do begin
            slResult.Add(IntToStr(StrToInt(slExp1.Strings[j]) * StrToInt(slExp2.Strings[i])));
        end;
    end;
    //计算和
    //总数是减1
    slTmp.Add('0');
    for nNum := 0 to slExp1.Count + slExp2.Count - 2 do begin
        slTmp.Add('0');
        nTemp := StrToInt(slTmp.Strings[nNum]);
        //循环求和
        for i := 0 to (slExp2.Count - 1) - 0 do begin
            for j := 0 to (slExp1.Count - 1) - 0 do begin
                if (j + i = nNum) then begin
                    nTemp := nTemp + StrToInt(slResult.Strings[(slExp1.Count) * (i) + j]);
                end
                else Continue;
            end;
        end;
        slTmp.Strings[nNum] := IntToStr(nTemp mod 10);
        slTmp.Strings[slTmp.Count - 1] := IntToStr(nTemp div 10);
    end;

    for i := slTmp.Count - 1 downto 0 do begin
        Result := Result + slTmp.Strings[i];
    end;
//      Result := slTmp.Text;
    slTmp.Free;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
    Memo3.Lines.Text := Multil(Trim(Memo1.Lines.Text), Trim(Memo2.Lines.Text));
end;

end.

 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -