萌新一枚、个人记录~多多指教
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/powx-n
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目描述:
实现 pow(x, n)
,即计算 x
的 n
次幂函数。
示例 1:
输入: 2.00000, 10
输出: 1024.00000
示例 2:
输入: 2.10000, 3
输出: 9.26100
示例 3:
输入: 2.00000, -2
输出: 0.25000
解释:
2
−
2
2^{-2}
2−2 =
1
/
2
2
1/2^2
1/22 = 1/4 = 0.25
说明:
-100.0 < x < 100.0
n 是 32 位有符号整数,其数值范围是
[
−
2
31
,
2
31
−
1
]
[−2^{31}, 2^{31} − 1]
[−231,231−1] 。
这里注意n,可能为负
思路:
这里就是在原来n为正数的模板上,修改了一丢丢。感觉好像比较容易看懂吧~
这里输入是32位有符号整数,所以n 定义为int 型,在n1取最小值的时候会出错
所以我换成了long 型。不知道这种方法合不合规,但是效果是好的:)
class Solution {
public:
double myPow(double x, long n) {//修改了n的变量类型
double ans=1;
long n1=n;
//如果n是负数,先转为正数求正结果,最后取倒数即可
if (n < 0)
{
n = ~n + 1;
}
while(n > 0)
{
if(n & 1)
ans = ans * x;
n >>= 1;
x = x * x;
}
if(n1 >= 0)
return ans;
else
return 1/ans;
}
};