Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- unit main_u;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls;
- type
- TForm2 = class(TForm)
- Label1: TLabel;
- procedure FormCreate(Sender: TObject);
- private
- { Private declarations }
- function stringMultiply(a, b : string) : string;
- function stringAdd(a, b : string) : string;
- public
- { Public declarations }
- end;
- var
- Form2: TForm2;
- implementation
- {$R *.dfm}
- { TForm2 }
- procedure TForm2.FormCreate(Sender: TObject);
- var
- sprod : string;
- i, isum : integer;
- start, freq, stop: int64;
- begin
- QueryPerformanceFrequency(freq);
- QueryPerformanceCounter(start);
- sprod := '1';
- for I := 2 to 100 do
- begin
- sprod := stringMultiply(sprod, inttostr(i));
- end;
- isum := 0;
- for I := 1 to length(sprod) do
- begin
- isum := isum + strtoint(sprod[i]);
- end;
- QueryPerformanceCounter(stop);
- // ShowMessage(FloattostrF((stop - start) / freq, ffNumber, 10, 3)); // Solution time will be shown upon program completion.
- ShowMessage(inttostr(isum));
- Label1.Caption := FloattostrF((stop - start) / freq, ffNumber, 10, 3);
- end;
- function TForm2.stringAdd(a, b: string): string;
- var
- i, j, alen, blen, carry, itotal : integer;
- stemp : string;
- begin
- if (length(a) < length(b)) then
- begin
- stemp := a;
- a := b;
- b := stemp;
- end;
- // append the 0's to keep the peace
- alen := Length(a);
- blen := Length(b);
- for I := 1 to (alen - blen) do
- begin
- b := '0' + b;
- end;
- carry := 0;
- stemp := '';
- // perform the addition
- for I := alen downto 1 do
- begin
- itotal := strtoint(a[i]) + strtoint(b[i]);
- itotal := itotal + carry;
- carry := itotal div 10;
- itotal := itotal mod 10;
- stemp := inttostr(itotal) + stemp;
- end;
- result := stemp;
- end;
- function TForm2.stringMultiply(a, b: string): string;
- var
- alen, blen : integer;
- i, j, carry, curprod : integer;
- stemp, stotal : string;
- begin
- alen := Length(a);
- blen := length(b);
- stotal := '';
- for I := blen downto 1 do
- begin
- carry := 0;
- stemp := '';
- for j := alen downto 1 do
- begin
- // find product from current pointers
- curprod := strtoint(a[j]) * strtoint(b[i]);
- curprod := curprod + carry;
- // adjust carry
- if (curprod > 9) then
- begin
- carry := curprod div 10;
- curprod := curprod mod 10;
- end
- else carry := 0;
- // append to the tempString
- stemp := IntToStr(curprod) + stemp;
- end;
- // position multiplier
- for j := 1 to blen - i do
- begin
- stemp := stemp + '0';
- end;
- // find the string total
- stotal := stringAdd(stotal, stemp);
- end;
- stotal := inttostr(carry) + stotal;
- result := stotal;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement