반응형
아래 코드는 두 수의 최대공약수를 구해주는 함수에 관한 코드이다.
/*
최대공약수 구하기 알고리즘
2개 값 입력, 최대 공약수 출력 함수
알고리즘:
1. v가 u보다 크면 v와 u값을 바꾼다.
2. u = u - v
3. u가 0이면 v가 최대공약수. 아니면 다시 처음으로 돌아간다.
*/
#include<stdio.h>
int GCD(void) {
int u = 0;
int v = 0;
int temp = 0;
int result = 0;
printf("2개의 값을 입력하시오.\n");
printf("a:");
scanf_s("%d", &u);
printf("b:");
scanf_s("%d", &v);
while(1)
{
if (v > u) {
temp = u;
u = v; // 1. v가 u보다 크다면, v와 u값을 바꾼다.
v = temp;
u = u - v; // 2.
}
else {
u = u - v;
}
if (u == 0)
{
result = v; // 3. u가 0이면 v가 최대공약수
break;
}
}
return result;
}
int main(void)
{
int result;
result = GCD();
printf("최대공약수는: %d", result);
return 0;
}
반응형
똑같은 기능을 하는 최대 공약수를 구하는 방법을 아래는 재귀함수를 이용한 방식이다.
/*
최대공약수 구하기 알고리즘(Recursive Function 모드 (재귀함수))
2개 값 입력, 최대 공약수 출력 함수
알고리즘:
1. v가 0이 아니면,
1.1. u = u % v
1.2. u와 v를 교환
1.3. 1으로 돌아감.
2. v가 0이면 u가 최대공약수
*/
#include<stdio.h>
int GCD_recursion(int u, int v) {
if (v == 0)
return u;
else
return GCD_recursion(v, u % v);
}
int main(void)
{
int u, v, result;
printf("2개의 값을 입력하시오.\n");
printf("a:");
scanf_s("%d", &u);
printf("b:");
scanf_s("%d", &v);
result = GCD_recursion(u, v);
printf("최대공약수는: %d", result);
return 0;
}
아래 함수는 똑같이 최대 공약수를 구하는 방법이지만, 알고리즘 성능이 좀 더 향상 된 방법이다.
/*
최대공약수 구하기 알고리즘(성능 개선 모드)
2개 값 입력, 최대 공약수 출력 함수
알고리즘:
1. v가 0이 아니면,
1.1. u = u % v
1.2. u와 v를 교환
1.3. 1으로 돌아감.
2. v가 0이면 u가 최대공약수
*/
#include<stdio.h>
int GCD(void) {
int u = 0;
int v = 0;
int temp = 0;
int result = 0;
printf("2개의 값을 입력하시오.\n");
printf("a:");
scanf_s("%d", &u);
printf("b:");
scanf_s("%d", &v);
while(v != 0) // v가 0이 아니면 무한 반복
{
u = u % v; // 1.1.
temp = v; // 1.2.
v = u;
u = temp;
}
result = u; // 2.
return result;
}
int main(void)
{
int result;
result = GCD();
printf("최대공약수는: %d", result);
return 0;
}
반응형
'C언어 \ C++' 카테고리의 다른 글
[C언어] 배열을 뒤집어 출력하는 코드 (포인터 문자열 뒤집어 출력) (2) | 2022.03.19 |
---|---|
[C언어] 구조체(struct)에 배열을 선언하여 사용 방법, 선언과 동시에 초기화 (0) | 2022.03.03 |
[C언어] 구조체(struct) 에 대해서, C언어 구조체란? 구조체 사용방법, 구조체 선언과 동시에 초기화 (0) | 2022.03.01 |
[C언어] 두 문자열(string)을 합치는 함수 (strcat함수, strncat함수) (0) | 2022.02.27 |
[C언어] 두문자열(string)을 비교하는 함수. 서로 같은가 비교 (strcmp 함수) (0) | 2022.02.27 |