VL15 - Rút gọn phân số

Xem dạng PDF

Gửi bài giải


Điểm: 1,00 (OI)
Giới hạn thời gian: 1.0s
Giới hạn bộ nhớ: 256M

Tác giả:
Dạng bài
Ngôn ngữ cho phép
C, C#, C++, Go, Java, Pascal, Perl, PHP, PyPy, Python, Ruby, Rust, Scratch, Swift

Cho tử số ~a~ và mẫu số ~b~ của 1 phân số là các số nguyên, bạn cần viết 1 chương trình rút gọn phân số ~\frac{a}{b}~ về phân số tối giản.

Input

  • Tử số ~a~ và mẫu số ~b~ của phân số cần rút gọn

Giới hạn

  • ~|a|, |b| \le 1000 ~

Output

Phân số tối giản sau khi đã rút gọn

  • Nếu phân số được yêu cầu không hợp lệ, in ra INVALID
  • Nếu giá trị của phân số là một số nguyên, in ra số nguyên đó
  • Trường hợp khác, in ra tử số và mẫu số của phân số tối giản cách nhau 1 dấu cách

Sample

Input #1
4 -8
Output #1
-1 2

Bình luận

Please read the guidelines before commenting.



  • 0
    Duong_Thanh_Khiem_L8  đã bình luận lúc 11, Tháng 3, 2026, 15:32

    FULL AC:

    #include <bits/stdc++.h>
    using namespace std;
    short a, b;
    int main(){
        cin >> a >> b;
        if (b == 0)cout << "INVALID";
        else {
            short x = a, y = b;
            while (y != 0){
                int r = x % y;
                x = y;
                y = r;
            }
            int ucln = x;
            short c = a / ucln;
            short d = b / ucln;
            if (d == 1)cout << c / d;
            else cout << c << " " << d;
        }
        return 0;
    }
    

  • 0
    leminhkhoi4g0newton5  đã bình luận lúc 12, Tháng 1, 2026, 15:47

    khó quá! vào link giúp em


  • 0
    leminhkhoi4g0newton5  đã bình luận lúc 12, Tháng 1, 2026, 15:46

    https://docs.google.com/document/d/19DeE41PCwQ4fBXiP2dWB2mfe9eanXbTFL2JZznlP8AU/edit?usp=sharing


  • 0
    tranvu281214  đã bình luận lúc 12, Tháng 1, 2026, 14:56

    Test case #1: AC [0,002s, 3,38 MB] (1/1) Test case #2: AC [0,002s, 3,38 MB] (1/1) Test case #3: AC [0,002s, 3,25 MB] (1/1) Test case #4: AC [0,002s, 3,38 MB] (1/1) Test case #5: AC [0,002s, 3,38 MB] (1/1)


  • -2
    dangkhoi1239876  đã bình luận lúc 5, Tháng 1, 2026, 8:35

    hehehehhehehe


  • 0
    thanhluan3754  đã bình luận lúc 27, Tháng 12, 2025, 17:30

    hận cái test số 2 =))))


  • -1
    minhphongv14  đã bình luận lúc 27, Tháng 12, 2025, 3:46

    ai hoi


    • 0
      tieugian2015  đã bình luận lúc 16, Tháng 5, 2026, 8:44

      ha long


  • -1
    nguyenminh03102023  đã bình luận lúc 7, Tháng 12, 2025, 13:00

    using namespace std;

    int uoc_max(int a, int b) {

    a = abs(a); b = abs(b);
    if ((a == 0) || (b == 0)) return a + b;
    
    while (a != b) {
        if (a > b) a -= b;
        else b -= a;
    }
    return a;
    

    }

    int main() {

    int a, b; cin >> a >> b;
    
    if (b < 0) {
        b = abs(b);
        a *= -1;
    }
    
    if (b == 0) {
        cout << "INVALID" << endl;
        return 0;
    }
    
    if (a % b == 0) {
        cout << a / b;
        return 0;
    }
    int _uoc = uoc_max(a, b);
    if (_uoc == 1) {
        cout << a << " " << b;
        return 0;
    }
    else {
        cout << a / _uoc << " " << b / _uoc;
        return 0;
    }
    
    
    return 0;
    

    }


  • 0
    bruhdarklmao  đã bình luận lúc 1, Tháng 12, 2025, 7:22

    test 2 rất là đb


  • 0
    nguyendongdangkhoa  đã bình luận lúc 1, Tháng 11, 2025, 10:41

    bth mò


  • 2
    Muoikhongman  đã bình luận lúc 1, Tháng 7, 2025, 2:00 chỉnh sửa

    hẹ hẹ hẹ


  • -4
    NguyenCongDat  đã bình luận lúc 28, Tháng 2, 2025, 11:42 chỉnh sửa

    thì ra phải xuống dòng khi in kết quả mới full xD


  • 2
    Ngoc_Thach  đã bình luận lúc 23, Tháng 2, 2025, 3:56

    Bài này nếu là số âm thì phải là tử âm nhé, mẫu luôn là số dương


  • -1
    Ngoc_Thach  đã bình luận lúc 23, Tháng 2, 2025, 3:50 chỉnh sửa

    Không có gì cả hihi


    • 0
      Ngoc_Thach  đã bình luận lúc 23, Tháng 2, 2025, 3:58

      sao lại paste code vào cmt thế này, xoá đi kiểu gì ạ


  • 2
    The_end19090  đã bình luận lúc 28, Tháng 1, 2025, 15:24

    bài này nên dùng gcd và mình xét tử và mẫi của nó sẽ bằng a = -a; b = -b; còn nếu (b == 1) cout << a hoac cout << a << " " << b; phan con lại tự làm =))


  • 6
    Bach2013  đã bình luận lúc 1, Tháng 1, 2025, 8:46

    case 4,5 mẫu số là âm nên nhớ để dấu âm lên tử số nha


  • 2
    loc_hoang  đã bình luận lúc 30, Tháng 9, 2024, 3:06 chỉnh sửa

    case 2 xử lý ntn vậy mn


    • -1
      uchiha17  đã bình luận lúc 19, Tháng 2, 2025, 3:04

      là nếu mẫu ==1 thì in ra a luôn(âm hay dương thì tự xử lí)


  • 2
    shibainu  đã bình luận lúc 17, Tháng 5, 2024, 7:25

    test case 2 là gì vậy ạ


  • 2
    HND683  đã bình luận lúc 16, Tháng 3, 2024, 20:49

    case chú ý nếu a = 0 nhé


  • 2
    sairon2k8  đã bình luận lúc 1, Tháng 3, 2024, 7:36

    case 4 là gì vậy mn mình sai ngay khúc đó


  • 2
    hoangvanthong  đã bình luận lúc 22, Tháng 1, 2024, 14:50

    int fake=__gcd(a,b) int anew=a/fake int bnew=b/fake if(anew%bnew!=0) if(anew<0 and bnew<0){ cout<<abs(anew)<<" "<<abs(bnew) return 0 } if(anew>=0 and bnew<0){ cout<<anew-anew*2<<" "<<abs(bnew) return 0 } if((anew>=0 and bnew>0) or (anew<0 and bnew>0)){ cout<<anew<<" "<<bnew return 0 } if(bnew==0){ cout<<"INVALID" return 0 } } else{ cout<<anew/bnew return 0 }


  • 4
    luyencode123  đã bình luận lúc 19, Tháng 10, 2023, 9:01

    Chú ý trường hợp phân số không rút gọn được và cả tử và mẫu cùng âm.


  • 3
    nhpnhpnhp  đã bình luận lúc 18, Tháng 10, 2023, 15:53

    chú ý case 5 là 2 số âm nhe mn


  • 2
    daokoaiyeu  đã bình luận lúc 27, Tháng 11, 2023, 19:17 chỉnh sửa

    case cuối xử lý ntn v


  • -2
    h6phz5  đã bình luận lúc 17, Tháng 9, 2023, 14:39

    case là gì nhỉ


  • -1
    rabbitcode  đã bình luận lúc 16, Tháng 9, 2023, 2:06

    case 2 là gì thế mn ơi


  • -3
    trinhtheanh3010  đã bình luận lúc 26, Tháng 8, 2023, 9:42

    test case 4 là gì v mn