C++에서 pow() 함수를 사용하지 않고 지수 계산하기
-
C++에서
pow()
함수를 사용하지 않고 지수 계산하기 -
C++에서
pow()
함수를 사용하지 않고for
루프를 사용하여 지수 계산 -
C++에서
pow()
함수를 사용하지 않고while
루프를 사용하여 지수 계산 -
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
이 코드에서 무슨 일이 일어나고 있습니까?
변수 b
와 e
는 각각 밑과 지수를 나타냅니다. 또한 변수 ans
는 값 1
을 보유하고 변수 i
는 for
루프가 실행되는 횟수를 정의합니다.
이제 여기서 pow()
함수와 함께 작동하는 논리가 이 코드의 for
블록에서 시작한다는 것을 이해하십시오. 따라서 for
블록 내부에서 일어나는 일을 분석해 보겠습니다.
i
가 1
로 초기화되고 지수의 값인 4
까지 올라가는 것을 볼 수 있습니다. 또한 루프 내부의 명령문은 b
와 ans
를 곱하고 결과를 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씩 감소합니다. 결국 e
가 0
으로 줄어들면 루프가 종료됩니다.
#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
루프 내부의 명령문은 b
와 ans
를 곱하고 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()
함수를 사용하지 않고 숫자의 지수를 계산하는 방법에 대해 설명했습니다. 이를 위해 for
및 while
루프를 사용했으며 숫자의 거듭제곱을 얻은 후 다른 계산을 추가로 수행할 수 있는 방법도 확인했습니다.
가장 흥미롭게도 우리는 숫자의 거듭제곱을 계산하는 재귀적 솔루션에 대해 논의했으며 상세한 순서도와 함께 해당 코드의 작동을 확인했습니다.