본문 바로가기
쿤즈 Dev/C

[C언어 문제] 두 수의 최대 공약수 구하기

by :)Koon 2021. 4. 26.

C언어를 이용해서 간단한 수학 문제를 만들어 보는 것이 프로그래밍 사고적으로 도움이 많이 되는 것 같아요. 앞선 포스팅들에서는 팩토리얼이나 피보나치수열에 대해서 프로그래밍을 해보았습니다.

2021.04.17 - [쿤즈 Dev/C] - [C언어 문제] Factorial(팩토리얼: 계승) 구하기 (반복문 이용)

2021.04.20 - [쿤즈 Dev/C] - [C언어 문제] Factorial(팩토리얼: 계승) 구하기 (재귀 함수 이용)

2021.04.22 - [쿤즈 Dev/C] - [C언어 문제] 피보나치(Fibonacci) 수열 만들기

이번 포스팅에서는 두 수의 최대 공약수를 구해보려 합니다.


C언어 문제. 두 수의 최대 공약수(GCD) 구하기

화면에 다음과 같이 출력되도록 프로그래밍하시오.

두 양의 정수를 입력하시오 : 18 42
최대공약수 = 6

조건 1. 반복문(for, while, do ... while) 이용하기

조건 2. 조건문(if) 이용하기

 

*프로그래밍 의도

사용자로부터 두 양의 정수를 입력받을 수 있는가?

최대 공약수를 구하는 방법을 찾을 수 있는가?

반복문을 사용할 수 있는가?

조건문을 사용할 수 있는가?

 

*문제 해결을 위한 글

2020.08.07 - [쿤즈 Dev/C] - [C언어] 연산자의 종류에 대해서 알아보자

2020.08.10 - [쿤즈 Dev/C] - [C언어] 조건문을 사용해서 분기시켜보자(1) - if 조건문!

2020.08.25 - [쿤즈 Dev/C] - [C언어] 반복문의 시작! - for 구문

2020.09.14 - [쿤즈 Dev/C] - [C언어] 반복문 두 번째 - while 구문

2020.09.15 - [쿤즈 Dev/C] - [C언어] 반복문 세 번째 - do while

 


C언어 문제 풀이

작성된 프로그래밍은 정답이 아닙니다. 프로그래밍 소스에 대해 정답은 없습니다. 다양한 방법으로 프로그래밍이 가능하며 한 가지 예일 뿐입니다.

소스코드 1. gcd_for.c

#include <stdio.h>

int main() {
    int num1, num2, gcd=1;
    int i;
    
    printf("두 양의 정수를 입력하시오 : ");
    scanf("%d %d", &num1, &num2);
    
    for(i=1; i<=num1 && i<=num2; i++) {
        if(num1 % i == 0 && num2 % i == 0)
            gcd = i;
    }
    
    printf("최대공약수 = %d\n", gcd);
    return 0;
}

 

소스코드 2. gcd_while.c

#include <stdio.h>

int main() {
    int num1, num2;
    
    printf("두 양의 정수를 입력하시오 : ");
    scanf("%d %d", &num1, &num2);
    
    while(num1 != num2) {
        if(num1 >= num2)
            num1 -= num2;
        else
            num2 -= num1;
    }
    
    printf("최대공약수 = %d\n", num1);
    return 0;
}

 

 

* 프로그래밍 의도 파악

최대 공약수를 구하는 방법을 찾을 수 있는가?

최대 공약수를 구하는 방법은 인터넷을 검색하시면 금방 찾을 수 있습니다. 최대 공약수는 두 수의 약수 중에서 공통된 가장 큰 약수를 찾는 것입니다. 구하는 방법에는 소인수 분해 방법, 유클리드 호제법이 있습니다.

 

우리는 이 두 가지 방법들을 이용해서 프로그래밍으로 옮겨보는 과정을 해 볼 수 있습니다.

 

사용자로부터 두 양의 정수를 입력받을 수 있는가?

사용자로부터 두 양의 정수를 입력받기 위해서는 가장 먼저 양의 정수를 입력받기 위한 변수가 필요합니다. 이 변수는 unsigned int를 선언하는 것이 더 확실한 방법이지만 위 예제에서는 int로 선언했습니다. 따라서 음수가 들어오는 경우나 0이 들어오는 경우에는 error를 출력해 줄 수도 있습니다.

 

반복문을 사용할 수 있는가?

반복문에는 for와 while, do ... while이 있습니다. 반복문을 알고 사용법을 익히면 동일한 과정의 반복을 쉽게 진행할 수 있기 때문에 프로그래밍 하기 굉장히 좋습니다. 반복문을 사용하는 방법은 링크에 연결된 포스팅에서 확인해 주세요.

 

조건문을 사용할 수 있는가?

반복문과 마찬가지로 조건문은 프로그래밍에서 뗄 수 없는 문법입니다. 조건문에 따라서 프로그래밍 결과가 달라지기 때문에 이 문법도 필히 익혀야 할 문법입니다.


수학적인 문제들이 사실 어려운 문제들은 아닙니다. 하지만 이 문제들을 프로그래밍으로 넣으려 하다 보면 생각보다 까다로운 부분이 있을 수 있습니다. 원리를 익히다 보면 금방 익숙해지실 겁니다. 도움이 되셨으면 합니다. 이상입니다.

댓글