티스토리 뷰

728x90
반응형

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

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

 

10872번: 팩토리얼

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

www.acmicpc.net

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

 

1. 문제

0보다 크거나 같은 정수 N에 대해서 N!을 출력

 

2. 풀이

N!은 N * (N - 1) * (N - 2) * ... * 1 입니다.

이를 그대로 구현하면 N을 입력받은 후 N부터 1까지 1씩 빼면서 곱해날 수 있습니다.

단, 이렇게 할 경우 N이 0인 경우를 따로 처리해주어야 합니다. (0!은 0이 아니라 1이므로)

 

저는 0인 경우를 따로 처리하지 않기 위해 출력 값(res)를 1로 초기화한 뒤,

for문으로 i = 2 부터 N까지 res에 곱하도록 했습니다.

이 방식을 활용하면 0이나 1인 경우를 if ~ else로 따로 처리하지 않아도 됩니다.

 

추가로 N의 최대값은 12이므로 N!의 최대값은 479,001,600(약 4.8억)입니다.

따라서 int형 변수(약 -21억 ~ 21억)로 충분합니다.

 

3. 코드

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

int N, res = 1;

int main() {
#ifdef _WIN32
	freopen("input.txt", "r", stdin);
#endif // _WIN32
	scanf("%d", &N);
	for (int i = 2; i <= N; ++i) res *= i;

	printf("%d\n", res);
	return 0;
}

 

728x90
반응형
댓글