본문 바로가기

Algorithm/BOJ

[백준/27433/c++] 팩토리얼 2

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

 

27433번: 팩토리얼 2

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

www.acmicpc.net

 

 

C++ 데이터 자료형의 크기와 범위

[참고 : https://sweetnew.tistory.com/16]

 

정수형 int 자료형은 4 byte = 2^32 bit

(signed) int 의 범위는 -2,147,483,648~2,147,483,647  (대충 20억)

unsigned int 의 범위는 0~4,294,967,295 (대충 43억)

 

정수형 long 자료형은 8 byte = 2^64 bit

(signed) long 의 범위는 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (대충 900경)

unsigned long 의 범위는 0 ~ 18,446,744,073,709,551,615 (정수형 치트키)

기억하자~~~~

 

 

틀린 이유

(signed) int를 써서 오버플로우 났따ㅎ

 

문제풀이 할 때는 입력 값의 양 끝 값을 생각해보자!

 

이 문제에서의 끝 값은...

20! ~= 20^20 ~= 2^10*10^10 (대충 10조)

 

즉, long 자료형을 사용해야한다!

 

 

#include <iostream>

using namespace std;

long factorial(long N){
  if(N==0 || N==1) return 1;

  return N*factorial(N-1);
}
int main(){
  long N;
  cin >> N;

  cout << factorial(N);

}