static을 사용하지 않고 문제를 풀기
조회수 346회
int main(void){
static int GCD;
int num1, num2;
printf("두 수를 입력하시오 :");
scanf_s("%d %d", &num1, &num2);
if (num1 > num2) {
int num3 = num2;
num2 = num1;
num1 = num3;
}
for (int i = 1; i < num1 + 1; i++) {
if (num2 % i == 0 && num1 % i == 0) {
GCD = i;
}
}
printf("\n두 개의 정수 : %d, %d", num1, num2);
printf("\n두 수의 최대공약수 : %d", GCD);
}
이런 식으로 제가 static을 써서 GCD를 구하는 방법을 만들었는데요. 개인적으로 static 변수를 사용하지 않고 문제를 푸는 방법이 있는지 궁금합니다.
1 답변
-
C언어에서
static
변수라는것은 함수 내부의 변수값을 유지시키고자 하는 경우 사용하는것입니다.아래는 이해를 쉽게 하기 위한 예제 코드입니다.
#include <stdio.h> int a() { static int x = 0; x++; return x; } int b() { int x = 0; x++; return x; } int main() { printf("%d\n", a()); printf("%d\n", a()); printf("%d\n", a()); printf("%d\n", b()); printf("%d\n", b()); printf("%d\n", b()); }
출력 결과는
1 2 3 1 1 1
입니다.
따라서 올려주신 코드에서는
static int GCD;
대신int GCD;
를 사용해도 같은 결과가 도출됩니다.또한, 유클리드 호제법이라는 방법을 이용하여 최대 공약수를 올려주신 코드보다 더 효율적으로 구하는 방법이 있습니다.
시간날때 한번 읽어보시면 재밌을것으로 생각됩니다.
댓글 입력