1. 【C++模版】求x的y次幂(函数模版)
时间: 2024-01-14 12:01:54 浏览: 34
以下是一个 C++ 函数模板,用于计算 x 的 y 次幂:
```cpp
template <typename T>
T power(T x, int y) {
T result = 1;
while (y > 0) {
if (y & 1) {
result *= x;
}
x *= x;
y >>= 1;
}
return result;
}
```
该函数接受两个参数:一个类型为 T 的底数 x,和一个类型为 int 的指数 y。函数返回值为类型 T 的 x 的 y 次幂。
该函数使用了二进制指数算法来计算幂次。在每个循环迭代中,它将指数 y 右移一位(相当于除以 2),并将底数 x 平方。如果 y 的最低位为 1,则将结果乘以当前的底数 x。通过这种方式,该算法能够在 O(log y) 的时间复杂度内计算幂次,而不是 O(y)。
相关问题
【C++模版】求x的y次幂(函数模版)
以下是求 $x$ 的 $y$ 次幂的函数模板:
```c++
template<typename T>
T power(T x, int y) {
if(y == 0) return 1;
T res = power(x, y / 2);
if(y & 1) return res * res * x;
else return res * res;
}
```
该函数模板可支持任意类型的 $x$,只要该类型支持乘法运算即可。其中,参数 `x` 表示底数,参数 `y` 表示指数。
函数实现采用递归的方式,通过将指数 $y$ 不断折半,快速计算出 $x^y$ 的值。时间复杂度为 $O(\log y)$。
使用示例:
```c++
#include <iostream>
using namespace std;
int main() {
cout << power(2, 10) << endl; // 输出 1024
cout << power(3.14, 2) << endl; // 输出 9.8596
return 0;
}
```
用函数模板求x的n次幂
可以使用以下函数模板来求解x的n次幂:
```c++
template<typename T>
T power(T x, int n) {
T res = 1;
while (n) {
if (n & 1) res *= x;
x *= x;
n >>= 1;
}
return res;
}
```
该函数接受两个参数:底数x和指数n,返回x的n次幂。在函数内部,我们使用了一个while循环来计算幂,其中我们使用了按位与运算符&来检查n的二进制表示中最低位是否为1。如果是1,则将底数x乘以结果res,否则将底数x自乘。然后将指数n右移1位,以便在下一次迭代中计算下一个最低位。最后,当n为0时,我们返回结果res。
使用该函数模板的示例如下:
```c++
#include <iostream>
using namespace std;
template<typename T>
T power(T x, int n) {
T res = 1;
while (n) {
if (n & 1) res *= x;
x *= x;
n >>= 1;
}
return res;
}
int main() {
cout << power(2, 10) << endl; // 输出1024
cout << power(3.14, 2) << endl; // 输出9.8596
return 0;
}
```