어떤 수의 거듭제곱은 반복 곱셈이나 프로그래밍 언어에서 제공하는 내장 함수를 사용하여 쉽게 계산할 수 있습니다.
이번 글에서는 a의 b제곱(ab)을 구하고, 그 결과값이 몇 자리 숫자인지 계산하는 방법을 알아보겠습니다. 먼저 예시를 살펴보겠습니다.
입력 예시 1
a = 5 b = 2
출력
2
5² = 25이므로 결과는 2자리 숫자입니다.
입력 예시 2
a = 7 b = 6
출력
6
7⁶ = 117,649이므로 결과는 6자리 숫자입니다.
알고리즘
- 두 수 a와 b를 초기화합니다.
- ab의 값을 계산합니다.
- log10(n)의 올림 값(ceil)은 숫자 n의 자릿수와 같습니다.
- 자릿수를 구한 뒤 반환합니다.
핵심 원리
10k-1 ≤ n < 10k를 만족하는 n은 k자리 숫자입니다. 따라서 log10(n)에 올림을 적용하면 정확한 자릿수를 얻을 수 있습니다. 예를 들어 log10(117649) ≈ 5.07이고, 이를 올림하면 6이 됩니다.
C++ 구현
다음은 위 알고리즘을 C++로 구현한 코드입니다.
#include <bits/stdc++.h>
using namespace std;
int getDigitsCount(int a, int b) {
return ceil(log10(pow(a, b)));
}
int main() {
int a = 8;
int b = 3;
cout << getDigitsCount(a, b) << endl;
return 0;
}실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
3
8³ = 512이므로 3자리 숫자가 맞습니다.
주의 사항
이 방법은 ab의 값이 double 타입으로 표현 가능한 범위(약 1.8 × 10³⁰⁸)를 넘지 않을 때 유효합니다. 지수가 매우 커서 오버플로우가 발생할 가능성이 있다면, 로그의 성질인 log10(aᵇ) = b × log10(a)를 활용하여 거듭제곱을 직접 계산하지 않고도 자릿수를 구할 수 있습니다.