[백준] 10872번 팩토리얼 C++ 문제 풀이 함수

2019. 8. 29. 22:40알고리즘/백준

728x90
반응형

문제

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

입력

첫째 줄에 정수 N(0 ≤ N ≤ 12)가 주어진다.

출력

첫째 줄에 N!을 출력한다.


예제 입력 1

10


예제 출력 1

3628800


문제 풀이

#include <iostream>
using namespace std;
int factorial(int n){
    if(n > 2)
    n *= factorial(n-1);
    return n;
}
int main(void){
    int num, result = 1;
    cin>>num;
    if(num!=0)
        result = factorial(num);
    cout<<result;
}

 꽤나 애를 먹은 문제입니다. 반례를 찾다가 0 팩토리얼이 1이라는 사실을 깨닫고 result 부분에 미리 1을 넣어뒀습니다.

 

0이 아닐 경우 result는 새로운 값으로 초기화되므로 0팩토리얼은 1이 출력이 됩니다. 

 

팩토리얼은 간단하게 재귀함수로 구현하였습니다. n이 2가 되면 더 이상 팩토리얼 함수를 타지 않고 

재귀함수가 종료되도록 하였습니다. 2까지만 곱해도 상관없기 때문입니다. 

 

0 팩토리얼이 1인 이유는 첨엔 이해가 되지 않았지만....

 

https://youtu.be/X32dce7_D48

이 영상을 보고 나니 아~ 하고 이해가 좀 됐습니다. 참고하시기 바랍니다.

 

출처 : https://www.acmicpc.net/problem/10872

 

10872번: 팩토리얼

0보다 크거나 같은 정수 N이 주어진다. 이때, N!을 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

728x90
반응형