在 C++ 中如何做幂运算
Jinku Hu
2023年10月12日
本文将演示关于如何在 C++ 中如何做幂运算的多种方法。
使用 std::pow
函数在 C++ 中把求一个数字的幂
std::pow
函数可以用来计算一个给定基数的幂,其中 n
可以是一个整数或浮点数。请注意,这个函数有多种异常和特殊情况,需要由程序员来处理,或者使用 C++ <cmath>
库头提供的单独函数来实现。例如,pow
不能用来计算负数的根,而应该用 std::sqrt
或 std::cbrt
。在下面的例子中,我们将求 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;
}
输出:
1; 2; 3; 4; 5; 6; 7; 8; 9; 10;
1; 8; 27; 64; 125; 216; 343; 512; 729; 1000;
使用自定义函数在 C++ 中求一个数字的平方
除了前面的方法,还可以使用 pow
函数实现各种自定义函数,以扩展标准功能。这个例子演示了一个 Pow2Vector
函数,它接受一个 vector
容器,并求其元素的平方。注意,PrintVector
函数模板将向量元素输出到控制台,它可以接受任何内置数据类型的向量。
#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;
}
输出:
1; 4; 9; 16; 25; 36; 49; 64; 81; 100;
在 C++ 中使用自定义函数来做幂运算
作为前一种方法的延续,我们可以对基础函数进行调整,以接受一个额外的指数值参数。这样一来,我们基本上已经实现了将向量中的给定元素取到我们提供的幂的程序。注意,要想让模板类型推导发挥作用,需要将 float
/double
变量初始化为指数值,然后传递给 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;
}
输出:
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;
作者: Jinku Hu