Computer >> 컴퓨터 >  >> 프로그래밍 >> C 프로그래밍

while 루프로 분수를 기약분수로 약분하는 C 프로그램 작성 방법

분수를 기약분수(최소 항)로 만든다는 것은 1을 제외한 어떤 수로도 분자와 분모를 동시에 나눌 수 없도록 약분하는 것을 의미합니다.

예를 들어, 24/4라는 분수의 기약분수는 6이며, 12/16이라는 분수의 기약분수는 3/4입니다.

이제 C 프로그램을 작성하여 분수를 기약분수로 약분하는 방법을 살펴보겠습니다.

예제 1: 유클리드 호제법 활용

첫 번째 방법은 유클리드 호제법을 이용해 두 수의 최대공약수(GCD)를 구한 뒤, 분자와 분모를 각각 최대공약수로 나누는 방식입니다.

#include<stdio.h>
int main(){
    int x,y,mod,numerat,denomi,lessnumert,lessdenomi;
    printf("enter the fraction by using / operator:");
    scanf("%d/%d", &x,&y);
    numerat=x;
    denomi=y;
    switch(y){
        case 0:printf("no zero's in denominator\n");
        break;
    }
    while(mod!=0){
        mod= x % y;
        x=y;
        y=mod;
    }
    lessnumert= numerat/x;
    lessdenomi=denomi/x;
    printf("lowest representation of fraction:%d/%d\n",lessnumert,lessdenomi);
    return 0;
}

실행 결과

enter the fraction by using / operator:12/24
lowest representation of fraction:1/2

위 프로그램에서 while 루프는 나머지 연산(%)을 반복하면서 두 수의 최대공약수를 찾습니다. 루프가 종료되면 변수 x에는 최대공약수가 저장되고, 원래의 분자와 분모를 이 값으로 나누어 기약분수를 얻습니다.

예제 2: 감소 방식으로 최대공약수 찾기

두 번째 방법은 두 수 중 작은 값부터 시작해 1씩 감소시키면서, 분자와 분모를 모두 나눌 수 있는 값을 찾는 방식입니다.

//reduce the Fraction
#include <stdio.h>
int main() {
    int num1, num2, GCD;
    printf("Enter the value for num1 /num2:");
    scanf("%d/%d", &num1, &num2);
    if (num1 < num2){
        GCD = num1;
    } else {
        GCD = num2;
    }
    if (num1 == 0 || num2 == 0){
        printf("simplified fraction is %s\n", num1?"Infinity":"0");
    }
    while (GCD > 1) {
        if (num1 % GCD == 0 && num2 % GCD == 0)
            break;
        GCD--;
    }
    printf("Final fraction %d/%d\n", num1 / GCD, num2 / GCD);
    return 0;
}

실행 결과

Enter the value for num1 /num2:28/32
Final fraction 7/8

이 프로그램은 먼저 두 수 중 작은 값을 초기 최대공약수 후보로 설정합니다. 그런 다음 while 루프 안에서 해당 값이 분자와 분모 모두를 나눌 수 있는지 확인하고, 가능하면 루프를 빠져나와 약분을 수행합니다. 또한 분자나 분모가 0인 경우 무한대(Infinity) 또는 0으로 처리하는 예외 처리도 포함되어 있습니다.

정리

두 가지 방법 모두 while 루프를 활용해 최대공약수를 구하고 이를 이용해 분수를 기약분수로 만듭니다. 유클리드 호제법은 연산 횟수가 적어 더 효율적이며, 감소 방식은 직관적으로 이해하기 쉬운 장점이 있습니다. 상황에 맞게 적절한 방법을 선택해 사용하면 됩니다.