본문 바로가기

프로그램언어/C언어

c언어 팩토리얼(계승)

1. 팩토리얼

팩토리얼이란 자연수 n일때 1부터 n까지의 모든 자연수를 곱한 것을 팩토리얼이라고 한다. 팩토리얼을 표현하기 위해서 !기호를 사용한다.

n! = (n-1) * (n-2) * (n-3) * ...  * 1; 또는 n! = 1 * 2 *  3 * ...  * n;

 

위 설명처럼 프로그램을 작성해 보자. ( 코딩 1 )

#include <stdio.h>

int main()
{
    int n, i, result=1;

    printf("정수 입력 : ");
    scanf("%d", &n);

    for (i = n; i >= 1; i--)
        result *= i;

    printf("%d! = %d\n", n, result);

    return 0;
}

실행결과]

 

정수 입력 : 5

5! = 120

위 설명처럼 프로그램을 작성해 보자. ( 코딩 2 )

#include <stdio.h>

int main() 
{ 
    int n, i, result=1; 

    printf("정수 입력 : "); 
    scanf("%d", &n); 

    for (i = 1; i<= n; i++)
        result *= i;

    printf("%d! = %d\n", n, result); 

    return 0; 
}

실행결과]

 

정수 입력 : 5

5! = 120

 

팩토리얼을 문제는 일반적으로 책에서 재귀함수부분에서 많이 다루는 예제입니다. 그래서 재귀함수를 이용한 소스코드를 작성해 보도록하겠습니다.

위 그림처럼 팩토리얼의 재귀함수의 식은 "n * fact( n - 1 );" 라는 것을 알 수 있습니다. 지금부터 코딩을 해보겠습니다.

#include <stdio.h>


int fect(int n)
{
    if (n == 1)
        return 1;
    else
        return n * fect(n - 1);
}


int main() 
{ 
    int n, i, result=1; 

    printf("정수 입력 : "); 
    scanf("%d", &n); 

    result = fect(n);

    printf("%d! = %d\n", n, result); 

    return 0; 
}

실행결과]

 

정수 입력 : 5

5! = 120

 

1309 : 팩토리얼

문제] 1부터 어떤 양의 정수 n까지의 정수를 모두 곱한 것을 말하며 n!로 나타낸다.

0! = 1
1! = 1
2! = 2
n! = n * (n-1)!

와 같이 정의된다.

예로 4! = 4×3×2×1 = 24 이다.

 

n! 이 주어졌을 때 결과를 출력하는 프로그램을 작성하라.

* 결과가 int범위를 넘는 경우
long long 입력/출력 서식문자 %lld 를 사용한다.

입력 형식]
입력은 한 줄로 이뤄지며 팩토리얼의 숫자 n(1≤n≤15)이 입력된다.

출력 형식]
n!에 대한 계산 결과를 "출력예"처럼 과정을 출력하고 마지막에 결과를 출력한다.

 

입력 예

4

 

 

 

출력 예]

4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
1! = 1
24

팩토리얼 문제를 코딩하면 아래와 같습니다.

소스코드 실행 결과

#include <stdio.h>
int fect(int n)
{
    if (n == 1)
    {
        printf("%d! = %d\n", n, n);
        return 1;
    }
    else
    {
        printf("%d! = %d * %d!\n", n, n, n - 1);
        return n * fect(n - 1);
    }
}


int main()
{
    int n, i;
    double gob = 1;

    scanf("%d", &n);

    if (n >= 1 && n <= 15) {
        gob = fect(n);
        printf("%.lf", gob);
    }

    return 0;
}

입력 예]

4

 

출력 예]

4! = 4 * 3! 
3! = 3 * 2! 
2! = 2 * 1! 
1! = 1 
24

'프로그램언어 > C언어' 카테고리의 다른 글

c언어 수학관련 함수  (0) 2019.10.17
c언어 삼각함수, 역삼각함수, 쌍곡선함수  (0) 2019.10.16
c언어 열거형 - enum  (0) 2019.10.14
c언어 10진수를 2진수로 변환  (0) 2019.10.11
c언어 소수 구하기  (0) 2019.10.11