Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 2의 n제곱 자릿수 구하는 방법

수의 거듭제곱은 반복적인 곱셈이나 프로그래밍 언어에서 기본 제공하는 함수를 통해 손쉽게 계산할 수 있습니다.

이번 글에서는 2의 n제곱(2n) 값을 구하고, 그 결과값이 몇 자리 숫자인지 알아내는 방법을 다룹니다. 먼저 예시를 통해 문제를 살펴보겠습니다.

입력

5

출력

2

2의 5제곱은 32이므로 자릿수는 2입니다.

입력

10

출력

4

2의 10제곱은 1024이므로 자릿수는 4입니다.

알고리즘

  • 숫자 n을 초기화합니다.
  • 2n의 값을 구합니다.
  • 상용로그(log10) 값의 올림(ceil)을 취하면 해당 숫자의 자릿수를 얻을 수 있습니다.
  • 계산된 값을 반환합니다.

이 방법이 성립하는 원리는 다음과 같습니다. 어떤 수 N의 자릿수는 ⌊log₁₀N⌋ + 1로 표현됩니다. 2n은 정확히 10의 거듭제곱이 될 수 없기 때문에, ⌈log₁₀(2n)⌉ = ⌊log₁₀(2n)⌋ + 1이 항상 만족되어 올림 연산 하나만으로 자릿수를 바로 구할 수 있습니다.

C++ 구현

다음은 위 알고리즘을 C++로 구현한 코드입니다.

#include <bits/stdc++.h>
using namespace std;
int getDigitsCount(int n) {
    return ceil(log10(pow(2, n)));
}
int main() {
    int n = 8;
    cout << getDigitsCount(n) << endl;
    return 0;
}

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

3

n이 8일 때 28 = 256이므로 자릿수는 3이 됩니다.

참고: 큰 수 처리 시 주의점

n이 커지면 pow(2, n)의 결과가 부동소수점 타입의 표현 범위를 넘어서거나 정밀도 손실이 발생할 수 있습니다. 이런 경우에는 2n을 직접 계산하지 말고 log₁₀(2n) = n × log₁₀2라는 성질을 활용하여 ceil(n * log10(2)) 형태로 계산하면 훨씬 안전하고 효율적으로 자릿수를 구할 수 있습니다.