Mình thấy bài ucln của bạn bên kia cũng hay nên mình có lấy text thử nhưng sao thấy bị lỗi
khi in ra thì chỉ in nguyên giá trị của mảng a. chứ chưa tính được ucln cua n, m so trên
nhờ bạn xem thử lỗi ở đâu vậy bạn phải chăng tại thủ thuc ucln bi loi j hay ko
const MAX = 32001;
fi = 'UC.INP';
fo = 'UC.OUT';
type numArray = array[1..MAX] of shortint;
var a, b : numArray;
n, m : integer;
f : text;
procedure doc;
var x : char;
i, so, code : integer;
begin
assign(f, fi); reset(f);
readln(f, n, m);
for i:=1 to MAX do begin a:=0; b:=0; end;
for i:=n downto 1 do
begin
read(f, x);
val(x, so, code);
a := so;
end;
readln(f);
for i:=m downto 1 do
begin
read(f, x);
val(x, so, code);
b := so;
end;
close(f);
end;
function SOSANH( VAR a: numArray; VAR n: integer; VAR b: numArray; VAR M: integer) : shortint;
var i : integer;
begin
if (N < M) then SOSANH:=-1;
if (n > M) then SOSANH:= 1;
for i := n downto 1 do
begin
if (a > b) then SOSANH:=1;
if (a < b) then SOSANH:=-1;
end;
SOSANH:=0;
end;
procedure differences(var a: numArray; var n: integer; VAR b: numArray; VAR M: integer);
var i, index : integer;
nho : shortint;
begin
nho := 0;
index := 1;
for i := 1 to N do
begin
if (a >= b + nho) then
begin
a := a - b - nho;
nho := 0;
end
else
begin
a := a + 10 - b - nho;
nho := 1;
end;
if (a > 0) then
index := i;
end;
n := index;
end;
procedure greatestCommonDivisor(var a: numArray; var n: integer; var b: numArray; var M: integer);
var t : shortint;
begin
t := SOSANH(a, n, b, M);
while (t <> 0) do
begin
if (t > 0) then
differences(a, n, b, M);
if (t < 0) then
differences(b, M, a, N);
t := SOSANH(a, n, b, M);
end;
end;
procedure xuat;
var i : integer;
begin
assign(f,fo); rewrite(f);
greatestCommonDivisor(a, n, b, m);
for i := n downto 1 do write(F,a);
close(f);
end;
begin
doc;
xuat;
end.