티스토리 뷰

728x90
반응형

백준 온라인 저지(BOJ) 27433번 팩토리얼 2

https://www.acmicpc.net/problem/27433

 

27433번: 팩토리얼 2

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

www.acmicpc.net

* 사용언어 : C언어, C++

 

1. 문제

0보다 크거나 같은 N에 대해 N! 출력

 

2. 풀이

재귀 함수를 활용해서 factorial 함수를 구현하면 되는 단순한 문제입니다.

기본적인 구현은 쉬우나 edge 케이스를 고려하지 않으면 오답이 나올 수 있습니다.

 

1) n == 0

0! == 1입니다.

따라서 재귀 함수의 return base condition 부분을

0 or 1 인 경우 1로 return 하도록 해야합니다.

 

2) n == 20

20! == 2,432,902,008,176,640,000입니다.

이를 제대로 계산하고 출력하면 함수의 return type과 출력 형식을 int가 아닌 long long int로 해야 합니다.

 

애초에 13!부터 약 62억으로 int형의 범위(약 -21억 ~ 21억)를 훌쩍 넘습니다.long long int로 처리할 경우 unsigned를 사용하지 않아도 20!까지 처리 가능합니다.

 

3. 코드

#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
#endif
/*
27433_팩토리얼2
1112KB	0ms
*/
#include <cstdio>

long long int factorial(int n) {
	if (n < 2) return 1;
	return n * factorial(n - 1);
}

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	int N;
	scanf("%d", &N);
	printf("%lld\n", factorial(N));
	return 0;
}

 

728x90
반응형
댓글