분수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 |