C++에서 pow() 함수를 사용하지 않고 지수 계산하기

Shikha Chaudhary 2023년10월12일
  1. C++에서 pow() 함수를 사용하지 않고 지수 계산하기
  2. C++에서 pow() 함수를 사용하지 않고 for 루프를 사용하여 지수 계산
  3. C++에서 pow() 함수를 사용하지 않고 while 루프를 사용하여 지수 계산
  4. C++에서 pow() 함수를 사용하지 않고 재귀를 사용하여 지수 계산
  5. 결론
C++에서 pow() 함수를 사용하지 않고 지수 계산하기

C++는 다른 많은 프로그래밍 언어와 마찬가지로 작업을 더 쉽게 해주는 함수와 모듈이 포함된 내장 라이브러리와 함께 제공됩니다. pow() 함수는 숫자의 거듭제곱을 쉽게 계산할 수 있는 내장 함수 중 하나입니다.

그러나 코딩 플랫폼과 같이 내장 함수를 사용하지 않고 숫자의 거듭제곱을 찾아야 하는 상황이 있을 수 있습니다. 어떻게 할 것인지 짐작이 가십니까?

이 기사에서는 pow() 함수를 사용하지 않고 숫자의 지수를 계산할 수 있는 다양한 방법에 대해 설명합니다.

C++에서 pow() 함수를 사용하지 않고 지수 계산하기

pow() 함수를 사용하는 대안으로 이동하기 전에 먼저 pow() 함수가 C++에서 어떻게 작동하는지 살펴보겠습니다.

C++의 pow() 함수

이름에서 알 수 있듯이 pow() 또는 power 함수는 숫자의 거듭제곱을 계산합니다. 이 함수는 두 개의 값을 인수로 사용하며 헤더 파일도 사용해야 합니다.

pow() 함수에서 전달하는 첫 번째 값은 밑으로 작용하고 두 번째 값은 밑을 올려야 하는 지수입니다. 다음은 pow() 함수를 사용하여 5^3의 값을 계산하는 프로그램입니다.

#include <math.h>
#include <stdio.h>

#include <iostream>

using namespace std;
int main() {
  double b = 5.0, p = 3.0, ans;
  ans = pow(b, p);

  cout << ans;

  return 0;
}

출력:

125

pow() 함수는 int가 아닌 double 값을 인수로 사용합니다. 그러나 이것은 pow() 함수가 정수와 함께 사용될 수 없다는 것을 의미하지는 않습니다.

그러나 때때로 pow() 함수와 함께 int를 사용하면 일부 컴파일러에서 터무니없는 출력이 제공될 수 있습니다. 예를 들어 pow(4,2)는 일부 컴파일러에서 출력을 15로 제공할 수 있습니다.

따라서 double 데이터 유형과 함께 pow() 함수를 사용하는 것이 좋습니다.

이제 pow() 함수의 기본 사항을 알았으니 C++에서 pow() 함수를 사용하지 않고 숫자의 지수를 계산하는 다른 방법에 대해 알아보겠습니다.

C++에서 pow() 함수를 사용하지 않고 for 루프를 사용하여 지수 계산

우리는 숫자의 지수를 계산할 때 반복되는 곱셈을 사용한다는 것을 알고 있습니다. 이 곱셈이 반복되는 횟수는 지수 또는 밑이 올라가는 거듭제곱에 따라 다릅니다.

다음은 동일한 예입니다.

5^4 = 5 * 5 * 5 * 5 = 625

for 루프를 사용하여 프로그래밍에 이 개념을 적용할 수도 있습니다. 다음은 동일한 코드입니다.

#include <math.h>
#include <stdio.h>

#include <iostream>

using namespace std;
int main() {
  int i, e, b, ans = 1;

  cout << "Enter the base: " << endl;
  cin >> b;

  cout << "Enter the exponent: " << endl;
  cin >> e;

  /*logic to calculate power*/

  for (i = 1; i <= e; ++i) {
    ans = ans * b;
  }

  cout << "The solution is: " << ans;

  return 0;
}

출력:

Enter the base:
5
Enter the exponent:
4
The solution is: 625

이 코드에서 무슨 일이 일어나고 있습니까?

변수 be는 각각 밑과 지수를 나타냅니다. 또한 변수 ans는 값 1을 보유하고 변수 ifor 루프가 실행되는 횟수를 정의합니다.

이제 여기서 pow() 함수와 함께 작동하는 논리가 이 코드의 for 블록에서 시작한다는 것을 이해하십시오. 따라서 for 블록 내부에서 일어나는 일을 분석해 보겠습니다.

i1로 초기화되고 지수의 값인 4까지 올라가는 것을 볼 수 있습니다. 또한 루프 내부의 명령문은 bans를 곱하고 결과를 ans 변수 자체에 저장합니다.

다음은 각 반복에서 변수 ans에 포함되는 내용입니다.

i=1
ans = 1*5
ans = 5

i=2
ans = 5*5
ans = 25

i=3
ans = 25*5
ans = 125

i=4
ans = 125*5
ans = 625

그리고 당연히 루프가 종료되면 변수 ans의 최종 값이 출력으로 반환됩니다. 이것이 본질적으로 for 루프를 사용하여 pow() 함수 없이 숫자의 지수를 계산하는 방법입니다.

이제 동일한 작업을 수행하기 위해 while 루프를 사용하겠습니다.

C++에서 pow() 함수를 사용하지 않고 while 루프를 사용하여 지수 계산

while 루프를 사용하여 숫자의 지수를 계산하는 기본 아이디어는 for 루프와 동일합니다. 변경되는 유일한 것은 반복 횟수를 계산하는 방법입니다.

아래 주어진 코드를보십시오.

여기 while 블록에서 e의 초기 값은 사용자가 지수로 입력한 값이며 각 단계마다 값이 1씩 감소합니다. 결국 e0으로 줄어들면 루프가 종료됩니다.

#include <math.h>
#include <stdio.h>

#include <iostream>

using namespace std;
int main() {
  int i, e, b, ans = 1;

  cout << "Enter the base: " << endl;
  cin >> b;

  cout << "Enter the exponent: " << endl;
  cin >> e;

  /*logic to calculate power*/

  while (e != 0) {
    ans = ans * b;
    --e;
  }

  cout << "The solution is: " << ans;

  return 0;
}

출력:

Enter the base:
5
Enter the exponent:
4
The solution is: 625

while 루프 내부의 명령문은 bans를 곱하고 for 루프의 경우와 동일한 방식으로 결과를 변수 ans 자체에 저장하는 것을 볼 수 있습니다.

다음은 각 반복에서 변수 ans에 포함되는 내용입니다.

e = 4
ans = 1 * 5
ans = 5

e = 3
ans = 5 * 5
ans = 25

e = 2
ans = 25 * 5
ans = 125

e = 1
ans = 125 * 5
ans = 625

따라서 이것은 while 루프를 사용하여 pow() 함수를 사용하지 않고 숫자의 지수를 계산하는 방법입니다.

출력에 대해 다른 작업을 추가로 수행하려는 경우 아래 예와 같이 수행할 수 있습니다.

#include <math.h>
#include <stdio.h>

#include <iostream>

using namespace std;
int main() {
  int i, e, b, ans = 1;

  cout << "Enter the base: " << endl;
  cin >> b;

  cout << "Enter the exponent: " << endl;
  cin >> e;

  /*logic to calculate power*/

  while (e != 0) {
    ans = ans * b;
    --e;
  }

  /*adding 500 to the result*/

  ans = ans + 500;
  cout << "The solution after addition is: " << ans;

  return 0;
}

출력:

Enter the base:
5
Enter the exponent:
4
The solution after addition is: 1125

밑과 지수가 정수인 경우 지수를 계산하는 데 이러한 방법을 사용하는 것이 좋습니다. float 값의 경우 pow() 함수를 사용하십시오.

이 두 방법의 복잡성은 O(n)이며 n은 지수입니다.

지금까지 우리는 숫자의 거듭제곱을 찾는 일반적인 루핑 방법에 대해 논의했습니다. 이제 동일한 작업을 수행하는 매우 흥미로운 재귀 솔루션에 대해 논의하겠습니다.

C++에서 pow() 함수를 사용하지 않고 재귀를 사용하여 지수 계산

아래 주어진 코드를보십시오.

#include <math.h>
#include <stdio.h>

#include <iostream>

using namespace std;

int product(int a, int b) {
  if (b)
    return (a + product(a, b - 1));
  else
    return 0;
}

int calculate_power(int x, int y) {
  if (y)
    return product(x, calculate_power(x, y - 1));
  else
    return 1;
}

int main() {
  cout << calculate_power(5, 2);
  getchar();
  return 0;
}

출력:

25

이 코드는 반복되는 곱셈을 위한 product 함수와 x^y를 찾기 위한 calculate_power 함수를 사용합니다.

main 블록이 실행되면 컨트롤은 먼저 calculate_power 기능으로 이동합니다. 이 함수 내에서 지수 y의 값이 0인 경우 제어는 if 블록으로 이동하고 함수는 1을 반환합니다.

그렇지 않으면 제어가 if 블록으로 이동합니다. 여기서 함수는 calculate_power 기능을 재귀적으로 호출하는 product 기능을 호출합니다. 또한 product 함수 내에서 제어가 if 블록으로 이동하면 product 함수가 재귀적으로 다시 호출됩니다.

다음은 이 코드의 작업을 더 잘 이해하는 데 도움이 되는 그림입니다.

Coming down:                       calculate_pow(5,2)
                            product(5, calculate_pow(5,1))
                                           product(5, calculate_pow(5, 0)
                                                           return 1


Going back, Step 1:                 product(5, 1)
                                return 5 + product(5, 0)
                                              return 0
                                            return 5+0 = 5


Going back, Step 2:                 product(5, 5)
                                         5 + product(5, 4)
                                                5 + 5 + product(5, 3)
                                                       5 + 5 + 5 + product(5, 2)
                                                            5 + 5 + 5 + 5 + product(5, 1)
                                                                      5 + 5 + 5 + 5 + 5
                                                                              25

이것이 재귀가 숫자의 거듭제곱을 계산하는 방법이며, 시간 복잡도는 O(n)입니다. 여기서 n은 지수입니다.

결론

이 기사에서는 C++에서 pow() 함수를 사용하지 않고 숫자의 지수를 계산하는 방법에 대해 설명했습니다. 이를 위해 forwhile 루프를 사용했으며 숫자의 거듭제곱을 얻은 후 다른 계산을 추가로 수행할 수 있는 방법도 확인했습니다.

가장 흥미롭게도 우리는 숫자의 거듭제곱을 계산하는 재귀적 솔루션에 대해 논의했으며 상세한 순서도와 함께 해당 코드의 작동을 확인했습니다.

관련 문장 - C++ Math