快速幂
示例
/**
* 50. Pow(x, n)
* 实现 pow(x, n) ,即计算 x 的 n 次幂函数(即,xn)。
示例 1:
输入:x = 2.00000, n = 10
输出:1024.00000
示例 2:
输入:x = 2.10000, n = 3
输出:9.26100
链接:https://leetcode-cn.com/problems/powx-n
*/
class Solution {
public double myPow(double x, int n) {
// 当n为负数最大值时,不能直接转为正数计算,否则会造成正数溢出(正数最大值比负数最大值小1)
// 所以这里将n转为long类型
long tmpN = n;
if(n < 0){
// 不能写成tmpN = -n;需要先强制转换为long类型后才进行操作
tmpN = Math.abs((long)n);
}
double ans = 1.0;
// 快速幂本质思想就是将n看为二进制数,然后判断二进制末尾是否为1,如果为1,则进行累乘,否则不乘
while(tmpN > 0){
if((tmpN & 1) == 1) ans *= x;
x *= x;
tmpN >>= 1;
}
return n < 0 ? (1.0/ans) : ans;
}
}