C언어/주차별 문제

[7주차] 최대공약수와 최소공배수 구하기 (포인터)

슈슈버거 2023. 4. 23. 13:04

문제


내가 작성한 코드

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

void gcdlcm(int a, int b, int *p, int *q) { //최대공약수 최소공배수 구하는 함수
    int small = a; //일단 a가 더 작다고 가정

    if(a>b){ //b가 더 작을 경우
        small = b; //작은 수를 b로 설정
    }

    for(int i = 2; i<=small; i++){ //2부터 small까지 반복
        if(a%i == 0 && b%i ==0){ //둘 다 나누어떨어질 경우
            *p = i; //p의 값에 현재 i 저장
        }
    }
    //최종 p의 값이 최대공약수

    *q = (a*b)/(*p); //a*b의 값을 p의 값으로 나눔 == 최소공배수

    printf("%d %d\n", *p, *q); //최대공약수 최소공배수 순으로 출력
}

int main() {
    int a,b; //비교할 수 입력

    scanf("%d %d", &a, &b);
    int gcd = 1; //최대공약수
    int lcm = 1; //최소공배수

    gcdlcm(a,b,&gcd,&lcm); //gcdlcm 호출(a,b는 int형 gcd, lcm은 포인터로)

    return 0;
}