Come eseguire l'elevazione a potenza in C++
-
Usa la funzione
std::pow
per alimentare un numero in C++ - Usa una funzione personalizzata per quadrare un numero in C++
- Usa le funzioni personalizzate per eseguire l’esponenziazione in C++
Questo articolo illustrerà vari metodi su come eseguire l’elevazione a potenza in C++.
Usa la funzione std::pow
per alimentare un numero in C++
La funzione std::pow
può essere usata per calcolare la potenza di una data base, dove n
può essere un numero intero o in virgola mobile. Si noti che questa funzione ha una varietà di eccezioni e casi speciali, che devono essere gestiti dal programmatore o implementati utilizzando una funzione separata fornita dall’intestazione della libreria C++ <cmath>
. Ad esempio, pow
non può essere utilizzato per calcolare la radice di numeri negativi, ma std::sqrt
o std::cbrt
. Nell’esempio seguente, troveremo il valore del cubo di ogni elemento del vettore int
.
#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;
}
Produzione:
1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
1; 8; 27; 64; 125; 216; 343; 512; 729; 1000;
Usa una funzione personalizzata per quadrare un numero in C++
Oltre ai metodi precedenti, puoi anche usare la funzione pow
per implementare varie funzioni personalizzate per estendere le funzioni standard. Questo esempio mostra una funzione Pow2Vector
, che accetta un contenitore vector
e ne piazza gli elementi. Notare che il modello di funzione PrintVector
invia elementi vettoriali alla console e può accettare vettori di qualsiasi tipo di dati incorporato.
#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;
}
Produzione:
1; 4; 9; 16; 25; 36; 49; 64; 81; 100;
Usa le funzioni personalizzate per eseguire l’esponenziazione in C++
Come continuazione del metodo precedente, possiamo regolare la funzione di base per accettare un parametro del valore di indice aggiuntivo. In questo modo, abbiamo sostanzialmente implementato un programma che porta un dato elemento in un vettore alla potenza che abbiamo fornito. Nota che per far funzionare la deduzione del tipo di template, devi inizializzare la variabile float
/ double
su un valore esponente e poi passarla alla funzione 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;
}
Produzione:
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