c·c++/c 프로그래밍

분수의 덧셈

바로이순간 2012. 5. 9. 16:52

분수1을 입력 받습니다. 분자1과 분모1의 두개의 정수로 입력을 받습니다.

분수2를 입력 받습니다. 분자2와 분모2의 두개의 정수로 입력을 받습니다.


[1] 두 경우다 분모가 0인지를 테스트 합니다. 0이라면 프로그램을 종료시킵니다.


[2] 분수1과 분수2를 통분 시킵니다.

분자1과 분모1에 분모2를 곱합니다.

또 분자2와 분모2에 분모1을 곱합니다. 


[3] 그후에 바뀐 분자1과 분자2를 더합니다.

이제 결과를 분자3과 분모3에 넣어 줍니다.


이것으로 다 끝난 것이 아닙니다.


[4] 분자3과 분모3의 최대공약수를 구해서 그 최대공약수로 분자와 분모를 나누어 줍니다.

약분을 하는 것입니다.


[5] 그러면 모든 결과가 나왔습니다. 이제 약분된 분자와 분모 즉 분수를 출력해 줍니다.


위의 프로그램에서 1,2,3,5는 어렵지 않습니다.

가장 어려운 부분이 두수의 최대공약수를 구하는 부분입니다.


먼저 이 부분을 생각해 봅시다.

============================================================


#include <stdio.h>

int gcd(int a, int b) {

    while((a=a%b)>0) {

        a=a+b;b=a-b;a=a-b;

    }

    return b;

}

int main() {

    int bj1,bm1, bj2, bm2, bj3, bm3, x;


    printf("분수1 입력 (분자 분모) : ");

    scanf("%d%d", &bj1, &bm1);

    printf("분수2 입력 (분자 분모) : ");

    scanf("%d%d", &bj2, &bm2);


    if(bm1<=0 || bm2<=0) {

        printf("잘못된 입력입니다.");

        return 1;

    }

    if(bj1<=0 || bj2<=0) {

        printf("잘못된 입력입니다.");

        return 1;

    }

    bm3=bm1*bm2;

    bj3=bj1*bm2+bj2*bm1;


    x=gcd(bj3, bm3);

    printf("더해진 분수: %d / %d", bj3/x, bm3/x);


    return 0;

}

'c·c++ > c 프로그래밍' 카테고리의 다른 글

선택정렬 - 개량형  (0) 2012.05.11
세수를 크기 순으로 출력하기  (0) 2012.05.10
조합하여 숫자구하기 코드 질문이요!  (0) 2012.05.08
비순환호출로 고친 머지소트  (0) 2012.05.07
다항식의 곱셈  (0) 2012.05.06