题目描述:
实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn )。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
示例 3:
输入:x = 2.00000, n = -2
输出:0.25000
解释:2-2 = 1/22 = 1/4 = 0.25
直接使用快速幂的思想, 例: Pow(3,13), 转换为3^1101来进行计算
3^13 因此可以拆分成3 ^ 8 * 3 ^ 4 * 3 ^ 0 * 3 ^ 1
x = 3 | N & 1 = 1 | ans = 3.0 | x = x | N >> 1 |
x = 9 | N & 1 = 0 | ans = 3.0 | x = x | N >> 1 |
x = 81 | N & 1 = 1 | ans = 243.0 | x = x | N >> 1 |
x = 6561 | N & 1 = 1 | ans =1594323.0 | x = x | N >> 1 |
class Solution {
public:
double myPow(double x, int n) {
//使用long long防止越界
long long N = n;
//定义结果变量
double ans = 1.0;
//负数次幂, 转为正数
if(n < 0) N = -N;
//计算结果
while(N){
if(N & 1) ans*=x;
x *= x;
N >>= 1;
}
return n < 0 ? 1/ans : ans;
}
};