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, 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

Hãy đọc nội quy trước khi bình luận.



  • -1
    ngodochanh  đã bình luận lúc 17, Tháng 4, 2024, 14:35

    public static int findGreatestCommonDivisor(int a, int b) { a = Math.abs(a); b = Math.abs(b);

        while (b != 0) {
            int temp = b;
            b = a % b;
            a = temp;
        }
    
        return a;
    }
    
    public static String simplifyFraction(int a, int b) {
        if (b == 0) {
            return "INVALID";
        }
    
        if (a % b == 0) {
            return String.valueOf(a / b);
        }
    
        int commonDivisor = findGreatestCommonDivisor(a, b);
    
        if ((a > 0 && b > 0) || (a < 0 && b < 0)) {
            a = Math.abs(a);
            b = Math.abs(b);
        } else {
            a = -Math.abs(a);
            b = Math.abs(b);
        }
    
        return a / commonDivisor + " " + b / commonDivisor;
    }
    

  • -5
    thaiphuong999  đã bình luận lúc 20, Tháng 3, 2024, 16:23

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


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

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


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

    include <bits/stdc++.h>

    using namespace std; long long a,b,s; int main() { cin>>a>>b; if (b==0) { cout<<"INVALID"; return 0; } s=__gcd(a,b); a=a/s; b=b/s; if (b==1) { cout<<a; return 0; } if (b!=1) { cout<<a<<" "<<b; return 0; } return 0; }


  • 0
    dtdungvnt  đã bình luận lúc 1, Tháng 3, 2024, 14:34

    Python AC

    from math import gcd a,b = map(int, input().split())

    if b == 0: print("INVALID")

    elif a == 0: print("0") else: if a % b == 0: print(a//b) else: u = gcd(a,b) a = a // u b = b // u

        if b < 0:
            a = a*(-1)
            b = b*(-1)
        print(a,b)
    

  • 0
    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 đó


  • 1
    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<<" "<


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

    include <bits/stdc++.h>

    using namespace std;

    int ucln1(int a, int b){ if (b== 0){ return a; } return ucln1(b,a%b); } int main(){ int a, b; cin >> a >> b; if ((b==0)||(a==0&&b==0)) { cout << "INVALID"; } else if (a%b==0){ cout << a/b; } else { int tu = a/ucln1(a,b); int mau = abs(b/ucln1(a,b)); if ((a<0 && b>0)||(a<0 && b>0)){ cout << tu*(-1) << " " << mau; } else if((a>0 && b>0)||(a<0 && b<0)) { cout << tu << " " << mau; } } return 0; } Hơi loằng ngoằng tí nhưng AC đủ 5 test


  • 0
    deno  đã bình luận lúc 1, Tháng 1, 2024, 14:11

    include <stdio.h>

    #include <math.h>
    #include <string.h>
     int gcd(int a,int b){
    while(b!=0){
        int r=a%b;
        a=b;
        b=r;
    }
    return a;
       }
       int main(){
    int a,b;
    scanf("%d %d",&a,&b);
    if(b==0||a==0&&b==0){
        printf("INVALID");
    }
    else if(a%b==0){
        printf("%d",a/b);
    }
     else{
    
    int c=gcd(a,b);
    if(b/c&lt;0){
    printf("%d %d",a/c*-1,b/c*-1);
    }
    else if(a/c>0&&b/c>0){
        printf("%d %d",a/c,b/c);
    }
    

    } }


  • 3
    kitajima2910  đã bình luận lúc 22, Tháng 12, 2023, 4:04

    Java chào các đạo hữu, có ích thì cho mình up vote nhé :p

    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.math.BigInteger;
    import java.util.StringTokenizer;
    
    /**
     *
     * @author Kitajima2910
     */
    public class VL15 {
    
        public static void main(String[] args) throws IOException {
    
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            StringTokenizer st = new StringTokenizer(br.readLine());
    
            BigInteger a = BigInteger.valueOf(Integer.valueOf(st.nextToken()));
            BigInteger b = BigInteger.valueOf(Integer.valueOf(st.nextToken()));
    
            if(b.intValue() == 0) {
                System.out.println("INVALID");
                return;
            }
    
            if(a.intValue() % b.intValue() == 0) {
                System.out.println(a.divide(b).intValue());
                return;
            }
    
            if(b.intValue() < 0) {
                b = b.multiply(new BigInteger("-1"));
                a = a.multiply(new BigInteger("-1"));
            }
    
            BigInteger gcd = a.gcd(b);
    
            BigInteger t = a.divide(gcd);
            BigInteger m = b.divide(gcd);
    
            System.out.println(t.intValue() + " " + m.intValue());
    
        }
    
    }
    

  • -2
    VoPhatDat  đã bình luận lúc 20, Tháng 12, 2023, 13:51

    def UCLN(a, b): if (a == 0 or b == 0): return max(a, b) else: while (a != b): if a > b: a-=b elif a < b: b-=a return max(a,b) a, b = map(int, input().split()) if b == 0: print("INVALID") else: if a % b == 0: print(int(a//b)) else: uoc = UCLN(abs(a),abs(b)) a//=uoc b//=uoc if (a < 0 and b < 0): print(abs(a),abs(b)) else: print(a, b)


  • 0
    TQThong2k11  đã bình luận lúc 14, Tháng 12, 2023, 14:45

    include <bits/stdc++.h>

    define str string

    typedef long long ll; typedef double dou;

    using namespace std; ll a, b; int main(){ cin >> a >> b; if(b == 0){ cout << "INVALID"; } else if(a % b == 0){ cout << a / b; } else{ ll c = __gcd(a, b); cout << (a / c) << ' ' << (b / c); } return 0; } Code C++ cho bạn nào tham khảo nhế ^^


  • -2
    KhoiMinh  đã bình luận lúc 13, Tháng 12, 2023, 6:41

    include <iostream>

    include <algorithm>

    using namespace std;

    define f() iosbase::syncwith_stdio(0); cin.tie(0); cout.tie(0)

    int main() { f(); int a,b; cin>>a>>b; int x=__gcd(a,b); if (!b) cout<<"INVALID"; else if (!(a%b)) cout<<a/b; else cout<<a/x<<" "<<b/x; }


  • -21
    _SUGAR__DADDY_  đã bình luận lúc 25, Tháng 11, 2023, 14:26

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • -6
    user  đã bình luận lúc 16, Tháng 11, 2023, 13:55

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


  • 0
    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.


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

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


  • -5
    Names_  đã bình luận lúc 10, Tháng 10, 2023, 7:43 chỉnh sửa

    Bình luận này đã bị ẩn vì có quá nhiều phản ứng tiêu cực. Nhấn để xem.


    • 0
      daokoaiyeu  đã bình luận lúc 27, Tháng 11, 2023, 19:17

      case cuối xử lý ntn v


  • 0
    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


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

    test case 4 là gì v mn