题目描述
题目链接:
https://leetcode-cn.com/problems/shu-zhi-de-zheng-shu-ci-fang-lcof/
思路分析
-
刚开始看完题,自以为这个题目不是很难,那么就直接掉到题的坑里了
但是上面这种写法对于数据考虑的并不全面,如果指数是0或者负数怎么办呢?上面的代码只考虑了指数大于0的情况 -
指数为负数是,我们可以取个绝对值,然后返回倒数,那 0 怎么办呢?对 0 取倒数是没有意义的,且底数为 0,但指数为负,这个时候不做处理,程序是会报错的
-
这里我们引入一个快速幂的概念(来自Lc题解)
-
专业版
-
简单理解
-
在这里解释一些代码里的疑问
-
为什么要用longlong,如果当 n 为负无穷时,就会超出 int 的范围
代码实现
class Solution {
public:
double myPow(double x, int n)
{
typedef long long LL;
bool is_minus = n < 0;
double res = 1;
for (LL k = abs(LL(n)); k; k >>= 1)
{
if (k & 1) res *= x;
x *= x;
}
if (is_minus) res = 1 / res;
return res;
}
};