unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{求最大公约数
算法: 假如 x > y, x mod y 取余数后,
y 付给 x、余数付给 y,
然后重复运算, 最后非 0 的余数就是最大公约数
}
function zdgys(x,y: Cardinal): Cardinal;
var
n: Integer;
begin
n := y;
if x < y then
begin
y := x;
x := n;
end;
while n > 0 do
begin
n := x mod y;
x := y;
if n > 0 then y := n;
end;
Result := y;
end;
{求最小公倍数
算法: x * y div 它们的最大公约数
}
function zxgbs(x,y: Cardinal): Cardinal;
var
m,n: Cardinal;
begin
m := x * y;
n := y;
if x < y then
begin
y := x;
x := n;
end;
while n > 0 do
begin
n := x mod y;
x := y;
if n > 0 then y := n;
end;
Result := m div y;
end;
{测试}
procedure TForm1.Button1Click(Sender: TObject);
const
str = '%0:d 与 %1:d 的最大公约数是 %2:d'#13#10'%0:d 与 %1:d 的最小公倍数是 %3:d';
var
x,y,a,b: Cardinal;
begin
x := StrToIntDef(Edit1.Text, 1);
y := StrToIntDef(Edit2.Text, 1);
a := zdgys(x, y);
b := zxgbs(x, y);
ShowMessageFmt(str, [x,y,a,b]);
end;
end.
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{求最大公约数
算法: 假如 x > y, x mod y 取余数后,
y 付给 x、余数付给 y,
然后重复运算, 最后非 0 的余数就是最大公约数
}
function zdgys(x,y: Cardinal): Cardinal;
var
n: Integer;
begin
n := y;
if x < y then
begin
y := x;
x := n;
end;
while n > 0 do
begin
n := x mod y;
x := y;
if n > 0 then y := n;
end;
Result := y;
end;
{求最小公倍数
算法: x * y div 它们的最大公约数
}
function zxgbs(x,y: Cardinal): Cardinal;
var
m,n: Cardinal;
begin
m := x * y;
n := y;
if x < y then
begin
y := x;
x := n;
end;
while n > 0 do
begin
n := x mod y;
x := y;
if n > 0 then y := n;
end;
Result := m div y;
end;
{测试}
procedure TForm1.Button1Click(Sender: TObject);
const
str = '%0:d 与 %1:d 的最大公约数是 %2:d'#13#10'%0:d 与 %1:d 的最小公倍数是 %3:d';
var
x,y,a,b: Cardinal;
begin
x := StrToIntDef(Edit1.Text, 1);
y := StrToIntDef(Edit2.Text, 1);
a := zdgys(x, y);
b := zxgbs(x, y);
ShowMessageFmt(str, [x,y,a,b]);
end;
end.