이 튜토리얼에서는 주어진 숫자의 팩토리얼(계승) 값을 계산한 뒤, 그 결과의 첫 번째 자릿수를 구하는 프로그램을 C++로 작성해 보겠습니다. 먼저 간단한 예시를 살펴볼까요?
입력 − 7
출력 − 5
7! = 5040이므로, 첫 번째 자릿수인 5가 출력됩니다.
문제 해결 단계
숫자를 초기화합니다.
반복문을 사용하여 해당 숫자의 팩토리얼을 계산합니다.
팩토리얼 값이 한 자리 숫자가 될 때까지 10으로 계속 나눕니다.
예제 코드
위 단계를 구현한 전체 코드를 확인해 보세요.
#include <bits/stdc++.h>
using namespace std;
void findFirstDigitOfFactorial(int n) {
long long int fact = 1;
// 2부터 n까지 곱하여 팩토리얼 계산
for (int i = 2; i <= n; i++) {
fact = fact * i;
}
// 한 자리 숫자가 될 때까지 10으로 나눔
while (fact >= 10) {
fact = fact / 10;
}
cout << fact << endl;
}
int main() {
int n = 7;
findFirstDigitOfFactorial(n);
return 0;
}실행 결과
위 프로그램을 컴파일하고 실행하면 다음과 같은 결과가 출력됩니다.
5
주의할 점
이 방법은 구현이 매우 간단하지만 한 가지 한계가 있습니다. long long int 자료형으로도 표현할 수 있는 범위에는 제한이 있기 때문에, 대략 20! 이상의 큰 숫자에서는 오버플로우가 발생할 수 있습니다. 훨씬 큰 숫자의 첫 자릿수를 구해야 한다면 로그(log) 연산을 활용하거나 임의 정밀도 연산 라이브러리를 사용하는 방법을 고려하는 것이 좋습니다.
마무리
지금까지 C++에서 팩토리얼 값의 첫 번째 자릿수를 구하는 방법을 알아보았습니다. 이 튜토리얼에 대해 궁금한 점이 있다면 댓글 섹션에 남겨주세요.