Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Lập Trình C

Chương trình C rút gọn phân số dùng while loop


Rút gọn phân số về dạng tối giản: không có số nào (trừ 1) chia hết cả tử và mẫu.

Ví dụ: 24/4 = 6/1, 12/16 = 3/4.

Ví dụ 1: Dùng thuật toán Euclid (GCD)

#include <stdio.h>

int main() {
    int x, y, mod, numerat, denomi, lessnumert, lessdenomi;
    
    printf("Nhập phân số (tử/mẫu): ");
    scanf("%d/%d", &x, &y);
    
    numerat = x;
    denomi = y;
    
    if (y == 0) {
        printf("Mẫu số không được bằng 0\n");
        return 1;
    }
    
    // Tìm GCD bằng thuật toán Euclid
    while (mod != 0) {
        mod = x % y;
        x = y;
        y = mod;
    }
    // x giờ là GCD
    
    lessnumert = numerat / x;
    lessdenomi = denomi / x;
    
    printf("Phân số tối giản: %d/%d\n", lessnumert, lessdenomi);
    return 0;
}

Kết quả ví dụ 1

Nhập phân số: 12/24
Phân số tối giản: 1/2

Ví dụ 2: Tìm GCD bằng cách duyệt giảm dần

#include <stdio.h>

int main() {
    int num1, num2, GCD;
    
    printf("Nhập phân số (tử/mẫu): ");
    scanf("%d/%d", &num1, &num2);
    
    // GCD ban đầu là số nhỏ hơn
    GCD = (num1 < num2) ? num1 : num2;
    
    if (num1 == 0 || num2 == 0) {
        printf("Phân số đơn giản: %s\n", num1 ? "Vô cùng" : "0");
        return 0;
    }
    
    // Tìm ước chung lớn nhất
    while (GCD > 1) {
        if (num1 % GCD == 0 && num2 % GCD == 0)
            break;
        GCD--;
    }
    
    printf("Phân số tối giản: %d/%d\n", num1/GCD, num2/GCD);
    return 0;
}

Kết quả ví dụ 2

Nhập phân số: 28/32
Phân số tối giản: 7/8