delphi 最大公约数与最小公倍数  
官方Delphi 学习QQ群: 682628230(三千人)\n
频道

delphi 最大公约数与最小公倍数


本例效果图:


代码文件:
--------------------------------------------------------------------------------

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.


推荐分享
图文皆来源于网络,内容仅做公益性分享,版权归原作者所有,如有侵权请告知删除!
 

Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号

执行时间: 0.049600124359131 seconds