C언어 문제 질문

조회수 1363회

두 양의 정수 a, b의 최대공약수를 계산하여 리턴하는 함수 int GetGCD(int a, int b)를 작성하 고 이를 이용하여 사용자가 0을 입력할 때까지 양의 정수를 입력 받아 그 수들의 최대공약수 를 출력하는 프로그램을 작성하시오.

int GetGCD(int x, int y) {

int a, b, c;

a = (x >= y) ? x : y;

b = (x >= y) ? y : x;


while (b != 0)
{
    c = a % b;
    a = b;
    b = c;
}

return a;

}

유클리드 방식으로 최대 공약수를 구하는 함수는 작성하였는데 main함수를 어떻게 작성해야 할 지 모르겠습니다.ㅠㅠ

2 답변

  • #pragma warning(disable : 4996)
    #include <stdio.h>
    
    int GetGCD(int x, int y); //사용자 함수 선언
    
    int main()
    {
        int x, y, result; //main 함수 내의 지역변수 선언
        x = y = -1;
        result = 0;
    
        while (!(x == 0 && y == 0)) // x, y 모두 0인 경우 while문을 빠져나가고, 그렇지 않은 경우에는 반복하여 수행
        {
            printf("두 수를 입력하세요 : ");
            scanf("%d %d", &x, &y);
    
            result = GetGCD(x, y);
    
            printf("%d, %d의 최대공약수 = %d\n\n", x, y, result);
    
        }
    
        return 0;
    }
    int GetGCD(int x, int y) {
        int a, b, c;
    
        a = (x >= y) ? x : y;
    
        b = (x >= y) ? y : x;
    
    
        while (b != 0)
        {
            c = a % b;
            a = b;
            b = c;
        }
    
        return a;
    }
    
    • (•́ ✖ •̀)
      알 수 없는 사용자
    • 아 두 수의 최대 공약수를 구하는 것이 아니라 main함수에서는 44 33 11등 여러개 숫자를 입력해서 저 숫자들의 최대공약수를 구하는 것입니다ㅠ 이성철 2019.3.9 14:17
  • #pragma warning(disable : 4996)
    #include <stdio.h>
    
    int GetGCD(int x, int y); //사용자 함수 선언
    
    int main()
    {
        int result; //main 함수 내의 지역변수 선언
    
        int tmp = 0;
        int num = -1;
        printf("2개 이상의 음이 아닌 정수를 입력하세요 [0을 입력하기 전까지의 수만 유효함] : ");
    
        while(1)
        {
    
            if (tmp == 0)
            {
                scanf("%d", &result);           
                tmp++;
            }
            else
            {
                scanf(" %d", &num);
                tmp++;
            }
            if (num == 0)
                break;
    
            if (tmp >= 2)
                result = GetGCD(result, num);
    
        }
    
        rewind(stdin);
        getchar();
        printf("최대공약수 = %d\n\n", result);
    
        printf("종료하려면 아무키나 누르세요");
        getchar();
        return 0;
    }
    int GetGCD(int x, int y) {
        int a, b, c;
    
        a = (x >= y) ? x : y;
    
        b = (x >= y) ? y : x;
    
        c = a % b;
        a = b;
        b = c;
    
        if (c == 0)
            return a;
        else return GetGCD(a, b);//c의 값이 0이 될때까지 재귀함수를 호출하고 c의 값이 0이 되면 비로소 최대공약수를 반환
    }
    

    이미지

    • (•́ ✖ •̀)
      알 수 없는 사용자

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)