본문 바로가기

+ 컴퓨터/C

[C언어] 기초 예제 4 - 사용자 정의 함수를 이용하여 최대공약수와 최소공배수 구하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <stdio.h>

int gcd(int a, int b);  //gcd 함수를 사용하겠다고 선언.

void main()  //아무것도 반환하지 않음
{
 int input1, input2;
 printf("첫번째 수를 입력하세요\n:");
 scanf("%d", &input1);
 printf("첫번째로 입력한 수는 %d입니다\n", input1);
 printf("두번째 수를 입력하세요\n:");
 scanf("%d", &input2);
 printf("두번째로 입력한 수는 %d입니다\n", input2);
 printf("최대공약수는 %d입니다.\n", gcd(input1, input2)); 
//사용자 정의 함수 gcd 이용
}   //여기까지가 수 2개를 받는 것.

int gcd(int a, int b)
{
 int smallnumber, d, gcdnumber;
 printf("gcd 함수가 실행되었습니다\n\n");
 printf("첫번째 input = %d \n두번째 input = %d\n\n", a, b);
 smallnumber = (a < b) ? a : b;
//(중요 표현!) a가 b보다 작으면 a를, 그렇지 않으면 b를 smallnumber에 넣습니다.
 printf("작은 수는 %d입니다\n",smallnumber);  //확인용입니다. 없어도 됩니다.
 for(d = 1 ; d <= smallnumber ; d++)
 { 
  if(a % d == 0 && b % d == 0)//d로나눴을때 나머지가 둘 다 0이 되어야 함
  { 
   printf("%d로 나누어 떨어집니다\n", d);
   gcdnumber = d;
   printf("gcdnumber = %d입니다.\n", gcdnumber);//확인용입니다. 없어도 됩니다.
  }

 }
 return gcdnumber;//함수 실행 후 나온 gcdnumber를 반환합니다.
//gcd(input1, input2)에 gcdnumber값이 들어갑니다.
}
<ㄴ최대공약수>

띄어쓰기 죄송합니다 -_-;
설명은 주석에 달아놨습니다.
처음 하기에는 어려운 부분이니 꼼꼼히 공부해주세요. 
이걸 이용해서 최소공배수도 구해 보겠습니다. 
예전에 짠거라 오류가 펑펑 날수도 있어요..




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <stdio.h>
void main()
{
 int input1, input2, LCM;
 printf("첫번째 수를 입력하세요\n:");
 scanf("%d", &input1);
 printf("%d가 입력되었습니다\n",input1);
 printf("두번째 수를 입력하세요\n:");
 scanf("%d", &input2);
 printf("%d가 입력되었습니다\n",input2);
 //printf("최대공약수는 %d입니다.\n", gcd(input1,input2));
 
 LCM = 0;
 LCM = input1 * input2 / gcd(input1,input2);
  printf("최소공배수는 %d입니다.\n", LCM);
}

int gcd(int a, int b)
{
 int smallnumber, d, gcdnumber;
  //printf("gcd 함수가 실행되었습니다\n\n");
 //printf("첫번째 input = %d \n두번째 input = %d\n\n",a,b);
 smallnumber = (a < b) ? a : b;
 //printf("작은수는 %d입니다\n", smallnumber);
 for(d = 1 ; d <= smallnumber ; d++)
 { 
 if(a % d == 0 && b % d == 0)
  { 
  //printf("%d로 나누어 떨어집니다\n",d);
  gcdnumber = d;
  }
 }
 
 return gcdnumber;
}

아까 본 gcd에서 조금 손을 봐서
LCM = A*B*GCD
를 가지고 최소공배수를 구해봤습니다.

따로 lcmnumber함수를 만들어도 되지만 역시 해놓은 거 쓰는게 편했거든요..