C 언어로 팩토리얼 계산하기

CBeginner
지금 연습하기

소개

이 실습에서는 C 프로그래밍에서 팩토리얼을 계산하는 방법을 배웁니다. 이 실습은 반복 루프와 재귀 함수를 사용하여 숫자의 팩토리얼을 계산하는 두 가지 방법을 다룹니다. 사용자로부터 정수 입력을 받은 후, 루프 기반 및 재귀적 접근 방식을 모두 사용하여 팩토리얼을 계산하고, 마지막으로 결과를 출력합니다.

이 실습은 단계별 지침과 코드 예제를 제공하여 C 에서 팩토리얼 계산 과정을 포괄적으로 이해하도록 안내합니다.

정수 n 입력

이 단계에서는 C 프로그램에서 팩토리얼을 계산하기 위해 정수 입력을 받는 방법을 배웁니다. 사용자에게 숫자를 입력하도록 요청하고, 이를 후속 계산을 위해 저장하는 간단한 프로그램을 만드는 데 중점을 둡니다.

먼저 프로젝트 디렉토리에 새로운 C 파일을 생성합니다.

cd ~/project
nano factorial.c

이제 정수 입력을 읽는 다음 코드를 추가합니다.

#include <stdio.h>

int main() {
    int n;

    printf("팩토리얼을 계산할 숫자를 입력하세요: ");
    scanf("%d", &n);

    printf("입력한 숫자: %d\n", n);

    return 0;
}

이제 프로그램을 컴파일하고 실행해 봅시다.

gcc factorial.c -o factorial
./factorial

예시 출력:

팩토리얼을 계산할 숫자를 입력하세요: 5
입력한 숫자: 5

이 코드에서:

  • printf()는 사용자에게 프롬프트를 표시하는 데 사용됩니다.
  • scanf()는 사용자로부터 정수 입력을 읽습니다.
  • %d는 정수를 위한 형식 지정자입니다.
  • &n은 입력을 저장하기 위해 n 변수의 메모리 주소를 전달합니다.

루프 또는 재귀를 사용한 n! 계산

이 단계에서는 반복 루프와 재귀 함수를 사용하여 숫자의 팩토리얼을 계산하는 두 가지 방법을 배웁니다. 이전 factorial.c 파일을 수정하여 두 가지 접근 방식을 구현할 것입니다.

factorial.c 파일을 업데이트합니다.

cd ~/project
nano factorial.c

루프와 재귀를 사용하여 팩토리얼 계산을 구현하는 다음 코드를 추가합니다.

#include <stdio.h>

// 반복 루프를 사용한 팩토리얼 계산
unsigned long long factorialLoop(int n) {
    unsigned long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

// 재귀를 사용한 팩토리얼 계산
unsigned long long factorialRecursive(int n) {
    if (n == 0 || n == 1) {
        return 1;
    }
    return n * factorialRecursive(n - 1);
}

int main() {
    int n;

    printf("팩토리얼을 계산할 숫자를 입력하세요: ");
    scanf("%d", &n);

    if (n < 0) {
        printf("음수에 대한 팩토리얼은 정의되지 않습니다.\n");
        return 1;
    }

    printf("루프를 사용한 팩토리얼: %llu\n", factorialLoop(n));
    printf("재귀를 사용한 팩토리얼: %llu\n", factorialRecursive(n));

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc factorial.c -o factorial
./factorial

예시 출력:

팩토리얼을 계산할 숫자를 입력하세요: 5
루프를 사용한 팩토리얼: 120
재귀를 사용한 팩토리얼: 120

이 구현의 주요 내용:

  • 더 큰 팩토리얼 값을 처리하기 위해 unsigned long long을 사용합니다.
  • 루프 방법은 for 루프를 사용하여 숫자를 곱합니다.
  • 재귀 방법은 기저 사례에 도달할 때까지 n-1로 자신을 호출합니다.
  • 음수에 대한 오류 처리가 추가되었습니다.
  • 두 가지 방법 모두 동일한 결과를 생성합니다.

팩토리얼 출력

이 단계에서는 팩토리얼 계산 프로그램을 개선하여 더 자세한 출력을 제공하고 다양한 입력 시나리오를 처리합니다. 팩토리얼 결과의 표현을 개선하기 위해 factorial.c 파일을 수정할 것입니다.

factorial.c 파일을 업데이트합니다.

cd ~/project
nano factorial.c

이전 내용을 다음 개선된 구현으로 바꿉니다.

#include <stdio.h>

unsigned long long factorialLoop(int n) {
    unsigned long long result = 1;
    for (int i = 1; i <= n; i++) {
        result *= i;
    }
    return result;
}

void printFactorialDetails(int n, unsigned long long factorial) {
    printf("팩토리얼 계산 세부 정보:\n");
    printf("숫자 (n): %d\n", n);
    printf("팩토리얼 (n!): %llu\n", factorial);

    printf("팩토리얼 전개: ");
    for (int i = 1; i <= n; i++) {
        printf("%d%s", i, (i < n) ? " × " : " = ");
    }
    printf("%llu\n", factorial);
}

int main() {
    int n;

    printf("팩토리얼을 계산할 음이 아닌 정수를 입력하세요: ");
    scanf("%d", &n);

    if (n < 0) {
        printf("오류: 음수에 대한 팩토리얼은 정의되지 않습니다.\n");
        return 1;
    }

    if (n > 20) {
        printf("경고: 큰 숫자의 팩토리얼은 정수 오버플로우를 발생시킬 수 있습니다.\n");
    }

    unsigned long long result = factorialLoop(n);
    printFactorialDetails(n, result);

    return 0;
}

프로그램을 컴파일하고 실행합니다.

gcc factorial.c -o factorial
./factorial

예시 출력:

팩토리얼을 계산할 음이 아닌 정수를 입력하세요: 5
팩토리얼 계산 세부 정보:
숫자 (n): 5
팩토리얼 (n!): 120
팩토리얼 전개: 1 × 2 × 3 × 4 × 5 = 120

이 버전의 주요 개선 사항:

  • 자세한 printFactorialDetails() 함수를 추가했습니다.
  • 전체 팩토리얼 전개를 표시합니다.
  • 큰 숫자에 대한 경고를 포함했습니다.
  • 명확하고 정보적인 출력을 제공합니다.

요약

이 실험에서는 사용자로부터 정수 입력을 받고 반복 루프와 재귀 함수를 사용하여 팩토리얼을 계산하는 방법을 배웠습니다. 사용자에게 숫자를 입력하도록 요청하고, 음수 입력을 처리하며, 팩토리얼 결과를 출력하는 C 프로그램을 만드는 과정을 탐구했습니다. 이 실험에서는 사용자 입력 읽기, 팩토리얼 계산 알고리즘 구현 및 최종 결과 출력의 핵심 단계를 다루었습니다.