Elevar el número a la potencia en C++
-
Usar la función
std::pow
para elevar un número a la potencia en C++ - Usar la función personalizada para elevar un vector de números a la potencia de 2 en C++
- Usar la función personalizada para elevar un vector de números a la potencia en C++
Este artículo demostrará múltiples métodos de cómo elevar un número a la potencia en C++.
Usar la función std::pow
para elevar un número a la potencia en C++
La función std::pow
puede ser usada para calcular el producto de un número base dado elevado a la potencia de n
, donde n
puede ser un valor integral o de punto flotante. Nótese que esta función tiene múltiples excepciones y casos especiales que deben ser manejados por el programador o implementados usando la función separada provista en el encabezado de la biblioteca de C++ <cmath>
. Por ejemplo, pow
no puede usarse para calcular la raíz de un número negativo, y en su lugar, deberíamos utilizar std::sqrt
o std::cbrt
. En el siguiente ejemplo, elevamos cada elemento de un vector int
a la potencia arbitraria de 3
.
#include <cmath>
#include <iostream>
#include <iterator>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::pow;
using std::vector;
template <typename T>
void PrintVector(vector<T> &arr) {
copy(arr.begin(), arr.end(), ostream_iterator<T>(cout, "; "));
cout << endl;
}
constexpr int POWER = 3;
int main() {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
PrintVector(arr);
for (auto &item : arr) {
item = pow(item, POWER);
}
PrintVector(arr);
return EXIT_SUCCESS;
}
Resultado:
1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
1; 8; 27; 64; 125; 216; 343; 512; 729; 1000;
Usar la función personalizada para elevar un vector de números a la potencia de 2 en C++
Como alternativa al método anterior, podemos implementar varias funciones personalizadas utilizando la función pow
para ampliar la funcionalidad estándar. Este ejemplo demuestra una función Pow2Vector
que toma un contenedor vector
y eleva sus elementos a la potencia de 2. Nótese que la plantilla de la función PrintVector
envía elementos vectoriales a la consola, y puede tomar cualquier vector de los tipos de datos incorporados.
#include <cmath>
#include <iostream>
#include <iterator>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::pow;
using std::vector;
template <typename T>
void PrintVector(vector<T> &arr) {
copy(arr.begin(), arr.end(), ostream_iterator<T>(cout, "; "));
cout << endl;
}
template <typename T>
vector<T> &Pow2Vector(vector<T> &arr) {
for (auto &i : arr) {
i = pow(i, 2);
}
return arr;
}
constexpr int POWER = 3;
int main() {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
PrintVector(Pow2Vector(arr));
return EXIT_SUCCESS;
}
Resultado:
1; 4; 9; 16; 25; 36; 49; 64; 81; 100;
Usar la función personalizada para elevar un vector de números a la potencia en C++
Como continuación del método anterior, podemos ajustar la función subyacente para tomar un argumento adicional de valor de exponente. De esta manera, básicamente hemos implementado la función que toma los elementos dados en el vector
a la potencia que proporcionamos. Observa que para que la deducción de tipo plantilla funcione, necesitarías inicializar la variable float
/double
como valor del exponente y luego pasarla a la función PowVector
.
#include <cmath>
#include <iostream>
#include <iterator>
#include <vector>
using std::copy;
using std::cout;
using std::endl;
using std::ostream_iterator;
using std::pow;
using std::vector;
template <typename T>
void PrintVector(vector<T> &arr) {
copy(arr.begin(), arr.end(), ostream_iterator<T>(cout, "; "));
cout << endl;
}
template <typename T>
vector<T> &PowVector(vector<T> &arr, T power) {
for (auto &i : arr) {
i = pow(i, power);
}
return arr;
}
constexpr int POWER = 3;
int main() {
vector<int> arr = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
vector<float> arr2 = {1.2, 2.3, 3.2, 4.5, 5.5, 6.2, 7.1, 8.2, 9.0, 10.1};
float power = 2.0;
PrintVector(PowVector(arr, 5));
PrintVector(PowVector(arr2, power));
return EXIT_SUCCESS;
}
Resultado:
1; 32; 243; 1024; 3125; 7776; 16807; 32768; 59049; 100000;
1.44; 5.29; 10.24; 20.25; 30.25; 38.44; 50.41; 67.24; 81; 102.01;
Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.
LinkedIn Facebook