Pascal

Modified: Wednesday, 22-12-2021 07:00 AM

Biểu diễn số thập phân vô hạn tuần hoàn ở dạng rút gọn

Ví dụ số thập phân vô hạn tuần hoàn
Phân số Giá trị gốc Giá trị rút gọn
1/3 0,333333... 0,(3)
45/56 0.803571428571428571... 0,803(571428)

var a,b,n,d,nd:int64;
    i:integer;
    Arr:array[1..10000] of int64;
        s,st:ansistring;
//---Kiem tra xem so du lap lai chua---//
function check(d:int64):boolean;
begin
    for i:=1 to nd do 
        if d=arr[i] then 
    begin
        exit(true)
    end ;
    exit(false);
end;
//---main---//    
begin
    writeln('Nhap vao 2 so nguyen');
    write('Nhap so a: ');readln(a);
    write('Nhap so b: ');readln(b);
    nd := 0;
    n  := a div b;
    str(n,st);
    s := st+',';
    d := a mod b;
    write(a,'/',b,' = ');
    while d<>0 do 
    begin
        if not check(d) then 
        begin
            inc(nd);         //Tăng chiều dài của mảng chứa số dư 
            arr[nd]:=d;      //Gán số dư vào mảng
            a := d*10;       //Thêm số 0 vào số dư
            n := a div b;
            d := a mod b;
            str(n,st);       //Thêm giá trị tính được vào kết quả
            s := s+st;
        end 
        else 
        begin
            insert('(',s,pos(',',s)+i); //Thêm dấu mở ngoặc '('
            insert(')',s,length(s)+1);  //Thêm dấu đóng ngoặc ')'
            writeln(s);
            break;
        end;
        if d =0 then
        begin
            write(s);
            break;
        end;
    end;
    readln;
end.