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

C++에서 a의 b제곱 결과값 자릿수 구하는 방법

어떤 수의 거듭제곱은 반복 곱셈이나 프로그래밍 언어에서 제공하는 내장 함수를 사용하여 쉽게 계산할 수 있습니다.

이번 글에서는 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)를 활용하여 거듭제곱을 직접 계산하지 않고도 자릿수를 구할 수 있습니다.