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);
}
'Algorithm > BOJ' 카테고리의 다른 글
| [백준/11720/c++] 숫자의 합 (0) | 2024.02.12 |
|---|---|
| [백준/5597/c++] 과제 안 내신 분..? (0) | 2024.02.10 |
| [프로그래머스/python] 외계어 사전 (0) | 2023.01.18 |
| [C/perfect C] 프로젝트 Part 1-05 : 십진수를 이진수, 8진수, 16진수로 변환 (0) | 2023.01.03 |
| [C/perfect C] 프로젝트 Part 1-04 : 소수로 삼각형 만들기 (0) | 2022.12.13 |